不允许的参数 customer_ids

Unpermitted params customer_ids

超级简单,愚蠢的事情,我现在一个多小时都弄不明白:

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

您的表单没有以数组形式发送 customer_ids 参数。

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

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

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

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

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

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

查看 Rails 中的收集表单助手。多选应该可以,但我没有这样用过。

尝试像这样更改您的 select 标签

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