如何遍历 objects 参数哈希中的哈希?
How do I iterate through a hash in an objects param hash?
Rails(和编码)菜鸟在这里(我确定我只是缺少基本的语法结构的东西),我创建了一个表单,用户可以在其中添加任意数量的字段对通过 AJAX(勉强)。此表单将收集 'sheet' 和相关数据类型(int、str...等)的列标题。 sheet 将有用户稍后添加的项目条目。我正在尝试创建一个 Sheets 控制器创建方法,它不仅可以保存 sheet 的标题和描述,还可以向 'columns' table 添加一条记录,其中包含列标题、数据类型和关联的 sheet id。当我提交 sheet 表单时,我在服务器终端中得到以下参数:
(抱歉,我不确定如何包装代码片段)
{"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!"}
我正在尝试遍历列哈希以在列 table 上创建一条记录。每个散列将使用标题和类型值作为 table.
上的条目
我的创建方法:
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
所以我知道我在引用列哈希及其键和值时搞砸了。我在想我可以在这里减少一些东西吗?我不知道。谷歌搜索并没有真正显示出这些基本的结构性问题,所以请让我知道我做错了什么,感谢您阅读所有这些内容!干杯!
工作代码(抱歉奇怪的格式)
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 关系中的 Sheet,您可以创建如下列:
column.each do |key, value|
@sheet.columns.new(
column_title: key
column_data_type: value
end
end
(然后保存块)
在你的控制器中。其中 column
是参数。这将表明该列属于 sheet 实例。
如果你想在没有关联的情况下创建列记录,你可以
column.each do |key, value|
Column.new(
column_title: key
column_data_type: value
end
end
(然后保存块)
(假设您的字段被命名为 column_title
而不仅仅是 title
。)
Rails(和编码)菜鸟在这里(我确定我只是缺少基本的语法结构的东西),我创建了一个表单,用户可以在其中添加任意数量的字段对通过 AJAX(勉强)。此表单将收集 'sheet' 和相关数据类型(int、str...等)的列标题。 sheet 将有用户稍后添加的项目条目。我正在尝试创建一个 Sheets 控制器创建方法,它不仅可以保存 sheet 的标题和描述,还可以向 'columns' table 添加一条记录,其中包含列标题、数据类型和关联的 sheet id。当我提交 sheet 表单时,我在服务器终端中得到以下参数: (抱歉,我不确定如何包装代码片段)
{"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!"}
我正在尝试遍历列哈希以在列 table 上创建一条记录。每个散列将使用标题和类型值作为 table.
上的条目我的创建方法:
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
所以我知道我在引用列哈希及其键和值时搞砸了。我在想我可以在这里减少一些东西吗?我不知道。谷歌搜索并没有真正显示出这些基本的结构性问题,所以请让我知道我做错了什么,感谢您阅读所有这些内容!干杯!
工作代码(抱歉奇怪的格式)
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 关系中的 Sheet,您可以创建如下列:
column.each do |key, value|
@sheet.columns.new(
column_title: key
column_data_type: value
end
end
(然后保存块)
在你的控制器中。其中 column
是参数。这将表明该列属于 sheet 实例。
如果你想在没有关联的情况下创建列记录,你可以
column.each do |key, value|
Column.new(
column_title: key
column_data_type: value
end
end
(然后保存块)
(假设您的字段被命名为 column_title
而不仅仅是 title
。)