未经许可的params customer_ids

时间:2016-03-24 10:07:14

标签: ruby-on-rails ruby-on-rails-4 strong-parameters

超级简单,愚蠢的事情,我现在想不到更多,而不是一个小时:

def user_params
  params.require(:user).permit(customer_ids: []) # pg array column
end

我的表格:

= f.select :customer_ids,
    options_from_collection_for_select(customers, 'id', 'name', user.customer_ids),
    { include_blank: 'Select customer', multiple: true, size: 15 },
    class: 'form-control'

在更新用户时我正在

Unpermitted parameter: customer_ids

世界上有多大可能?

Parameters: {"utf8"=>"✓", "authenticity_token"=>"oCkUEi2pNajM0ydHUH2w6iYIq5eKjfCY5ig9U2qDTXxMqECCgQ2Dn9YtqkMqXlTmLl5q/OO8x23o/P50SnmgUg==", "user"=>{"customer_ids"=>"84"}, "commit"=>"Assign selected customer to user", "id"=>"2"}

2 个答案:

答案 0 :(得分:2)

您的表单未以customer_ids参数作为数组发送。

"user"=>{"customer_ids"=>"84"}

这就是原因。它应该是(注意方括号):

"user"=>{"customer_ids"=>"[84]"}

如果将param声明为数组,则应将其作为数组发布。这可能是您表单中的问题。

通常,我会使用复选框来做这样的事情,但这取决于你的用户界面。这是我过去做过的类似事情。

= f.collection_check_boxes :customers, customers, :id, :name do |cb|
  = cb.label
    span.pull-right = cb.check_box

查看Rails中的集合表单助手。多选应该有效,但我没有用这种方式。

答案 1 :(得分:0)

尝试更改此select标记

= f.select(:customer_ids, customers.collect { |c| [ c.name, c.id ] }, 
                          { prompt: "Select Customer"}, 
                          { multiple: true, size: 5, class: 'form-control' })