即使日志显示通过,参数也是零

时间:2014-06-19 02:38:32

标签: ruby-on-rails forms checkbox parameters

Rails调试器的参数显示

{"utf8"=>"✓",
  "authenticity_token"=>"m2NMruoFRr6lpsuVMK9UthlY0bsJsPmf1LWce2uKaH4=",
  "signup_id"=>"5",
  ":item_name"=>["Electric drill",
  "Screwdriver set"],
  "commit"=>"Go!"}

但是控制器创建方法不断发出下一个错误:

undefined method `each' for nil:NilClass` on the `params[:item_name]

来自控制器:

def create
    params[:item_name].each do |item|
      item = @signup_parent.inventories.build(inventory_params)
    end
end

def inventory_params
  params.require(:inventory).permit(:signup_id, {:item_name => []})
end

UPDATED控制器代码(参见下面的评论帖子,仍然无效,但希望越来越近)

def create
    params[":item_name"].each do |item|
      item = @signup_parent.inventories.build(inventory_params)
    end
end

def inventory_params
  params.permit(:signup_id, {:item_name => []})
end

查看代码段,以防它有用:

<%= check_box_tag ":item_name[]", "#{thing}" %>
<%= hidden_field_tag :signup_id, "#{Signup.find_by_email(session[:signup_email]).id}" %>

1 个答案:

答案 0 :(得分:1)

你有":item_name"(带引号和冒号)参数,所以我想你应该用它来引用:

params[":item_name"].each do |item|
...

更好地处理它从特定形式传递的方式。

inventory_params也存在问题 - 您可以要求没有inventory,它们都是root用户。所以我想这个:

params.require(:inventory).permit(:signup_id, {:item_name => []})

没有工作。您可以使用普通参数,或在前端处理此参数。但是,您可以在不需要的情况下允许它们:

params.permit(:signup_id, {':item_name' => []})

或:

params.permit!

更新:您应该将文件更改为

<%= check_box_tag "inventory[item_name][]", "#{thing}" %>
<%= hidden_field_tag "inventory[signup_id]", "#{Signup.find_by_email(session[:signup_email]).id}" %>

然后参数更改,以便您可以使用params.permit(:signup_id, {:item_name => []})