簡體   English   中英

如何遍歷對象參數哈希中的哈希?

[英]How do I iterate through a hash in an objects param hash?

這里的Rails(和編碼)菜鳥(我確定我只是缺少基本的語法結構方面的東西),我創建了一個表單,用戶可以通過AJAX(很少)添加任意多的字段對。 該表格將收集“工作表”的列標題以及相關的數據類型(int,str ...等)。 該工作表將具有用戶稍后添加的項目條目。 我正在嘗試創建一個Sheets控制器的create方法,該方法不僅可以保存工作表的標題和說明,還可以向列的表中添加列標題,數據類型和相關工作表ID的記錄。 提交工作表表單時,在服務器終端中得到以下參數:(對不起,我不確定如何包裝代碼片段)

{"utf8"=>"✓", "authenticity_token"=>"yMlnfO1EWptkEXp5+9AGCO5C3vHt62EUHoKjdWoUB8I=", "sheet"=>{"title"=>"test 33", "description"=>"Descriptions"}, "column"=>[{"title"=>"1", "type"=>"num"}, {"title"=>"2", "type"=>"int"}, {"title"=>"3", "type"=>"real"}, {"title"=>"fo", "type"=>"no"}], "commit"=>"Save Specsheet!"}

我正在嘗試遍歷列哈希,以在列表上創建一條記錄。 每個哈希將標題和類型值用作表上的條目。

我的創建方法:

   def create
@sheet = Sheet.new(sheet_params)
@sheet[:column].each do |key, value|
  @column = Column.new
  @column[:column_title] = key
  @column[:column_data_type] = value
  @column.save
end

if @sheet.save
  redirect_to @sheet
else
  flash[:error] = "Error saving sheet."
  render :new
end

結束

我的錯誤通常是這樣的:nil:NilClass的未定義方法“ each”

**@sheet[:column].each do |key, value|**
  @column = Column.new
  @column[:column_title] = key
  @column[:column_data_type] = value

所以我知道我搞砸了引用列哈希及其鍵和值。 我在想我可以在這里減少一些東西嗎? 我不知道。 這些類型的基本結構性問題實際上並不會出現在Google搜索中,因此請讓我知道我在做什么錯,並感謝您閱讀所有這些內容! 干杯!

工作代碼(對不起,格式怪異)

  def create
@sheet = Sheet.new(sheet_params)

column_params.each do |value|
  @sheet.columns.build(value.permit(:title, :data_type))
end

if @sheet.save
  redirect_to @sheet
else
  flash[:error] = "Error saving sheet."
  render :new
end

結束

      private
  def sheet_params
    params.require(:sheet).permit(:title, :description, :created_at, :updated_at, :column)
  end

  def column_params
    params.require(:column)
  end

當您調用@sheet[:column] ,您引用的是Sheet的實例,而不是您嘗試循環瀏覽的參數。

如果您嘗試將has_many關系中的Columns與Sheets關聯,則可以創建Columns,例如:

column.each do |key, value| 
  @sheet.columns.new( 
    column_title: key
   column_data_type: value
  end
end  

(然后保存塊)在您的控制器中。 其中column是參數。 這將指示該列屬於圖紙實例。

如果您嘗試在沒有關聯的情況下創建“列”記錄,則可以執行

column.each do |key, value|
  Column.new( 
    column_title: key
    column_data_type: value
  end 
end

(然后保存塊)

(均假設您的字段被命名為column_title ,而不僅僅是title 。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM