[英]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.