【发布时间】:2015-06-16 19:35:32
【问题描述】:
Rails(和编码)新手(我确信我只是缺少基本的语法结构),我创建了一个表单,用户可以通过 AJAX(几乎没有)添加任意数量的字段对。此表单将收集“工作表”和相关数据类型(int、str...等)的列标题。该工作表将包含用户稍后添加的项目条目。我正在尝试制作一个表格控制器创建方法,该方法不仅可以保存表格的标题和描述,还可以在“列”表中添加一条记录,其中包含列标题、数据类型和关联的表格 ID。当我提交表单时,我在服务器终端中获得以下参数: (对不起,我不确定如何包装代码 sn-p)
{"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
所以我知道我在引用列哈希及其键和值时搞砸了。我想我可以在这里减少一些东西?我不知道。这些基本的结构问题并没有真正出现在谷歌搜索中,所以请让我知道我做错了什么,感谢您阅读所有这些!干杯!
工作代码(抱歉格式奇怪)
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_params[:column].each do |key, value|可能会更好。发布sheet_params方法。 -
谢谢萨蒂亚!我已经使用您的评论和下面的答案来找出解决方案。
标签: ruby-on-rails ruby loops hash syntax