Ruby on rails 未经许可的参数客户标识
超级简单,愚蠢的事情,我现在一个多小时都想不出来了:Ruby on rails 未经许可的参数客户标识,ruby-on-rails,ruby-on-rails-4,strong-parameters,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
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"}
表单未将
客户ID
参数作为数组发送
"user"=>{"customer_ids"=>"84"}
这就是为什么。应该是(注意方括号):
如果将参数声明为数组,则应将其作为数组发布。这可能是您的表单中的一个问题
通常,我会用复选框来表示类似的内容,但这取决于您的用户界面。我过去也做过类似的事情
= f.collection_check_boxes :customers, customers, :id, :name do |cb|
= cb.label
span.pull-right = cb.check_box
查看Rails中的集合表单帮助程序。multiselect应该可以工作,但我没有这样使用。您的表单没有将
客户ID
参数作为数组发送
"user"=>{"customer_ids"=>"84"}
这就是为什么。应该是(注意方括号):
如果将参数声明为数组,则应将其作为数组发布。这可能是您的表单中的一个问题
通常,我会用复选框来表示类似的内容,但这取决于您的用户界面。我过去也做过类似的事情
= f.collection_check_boxes :customers, customers, :id, :name do |cb|
= cb.label
span.pull-right = cb.check_box
查看Rails中的集合表单帮助程序。multiselect应该可以工作,但我没有这样使用过。试着像这样更改您的
select
标记
= f.select(:customer_ids, customers.collect { |c| [ c.name, c.id ] },
{ prompt: "Select Customer"},
{ multiple: true, size: 5, class: 'form-control' })
尝试像这样更改
选择标记
= f.select(:customer_ids, customers.collect { |c| [ c.name, c.id ] },
{ prompt: "Select Customer"},
{ multiple: true, size: 5, class: 'form-control' })
…permit(customer\u id:[])
是正确的语法。您的代码中还出现了其他问题。我建议你去别处看看。我能想到的另一件事是,由于某种原因,该列未被识别为数组。请像这样尝试def user\u params.require(:user).permit(:customer\u id=>[])#pg array column end
@Mohamad where?我的意思是,我调试了它,一切看起来都很好,但它要么显示未经许可的参数,要么,当我更改为permit(:customer\u id)
时,它只是不更新customer\u id
,我认为在这种情况下。permit(:customer\u id)
应该在表单字段options\u from\u collection\u中添加{/code>,以供选择(customers,'id','name',user.customer\u id),{},{include\u blank:'Select customer',multiple:true,size:15},class:'form control'
。应该可以。试试这个…允许(customer\u id:[])
是正确的语法。您的代码中还存在其他问题。我建议您去别处看看。我能想到的另一件事是,出于某种原因,该列未被识别为数组。请这样尝试def user\u params.require(:user).permit(:customer\u id=>[])#pg array column end
@Mohamad where?我的意思是我调试了它,看起来一切都很好,但它要么显示未经许可的参数,要么,当我更改为permit(:customer_id)
时,它只是不更新customer_id
我认为在这种情况下。permit(:customer_id)
应该添加{
在表单字段options\u from\u collection\u for\u select(customers,'id','name',user.customer\u id),{},{include\u blank:'select customer',multiple:true,size:15},class:'form control'
。应该可以。尝试一下他无法通过访问它。允许(:customer\u id)
我得跑去送我儿子上学。我回来后会看的。否则我妻子会杀了我:D@AndreyDeineko这可能对你有帮助@Mohamed,没关系,我想出来了。再次感谢你指出!:)他无法通过访问它。permit(:customer\u id)
他们跑去送我儿子上学。我回来后再看。否则我妻子会杀了我:D@AndreyDeineko这可能对你有帮助@Mohamed,没关系,我知道了。再次感谢您的指点!:)这仍然不会在参数中发送数组,不幸的是,您仍然在参数中以字符串形式获取ID吗?这是我最初的问题,在您获得解决方案之前,我仍然会这样做,作为一种解决方法,您可以在更改许可证()后执行类似于customer\u id=user\u params[:customer\u id]的操作
method to.permit(:customer\u id)
这仍然不会在参数中发送数组,不幸的是,您仍然在参数中以字符串形式获取ID吗?这是我最初的问题,在得到解决方案之前,我仍然会这样做,作为一种解决方法,您可以执行类似于customer\u id=user\u params[:customer\u id].拆分(“”)的操作
将permit()
方法更改为.permit(:客户ID)