Params为nil,即使日志显示通过



来自Rails调试器的参数显示

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

但是controller create方法一直出错

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

更新控制器代码(见下面的评论线程,仍然不工作,但希望越来越接近)

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}" %>

您有":item_name"(引号和冒号)参数,所以我猜您应该使用引号:

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

并且更好地处理它如何从特定形式传递。

还有一个问题与inventory_params -没有inventory,你可以要求,他们都在根。所以我想:

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 => []})

相关内容

最新更新