rails不接收数组值强参数

时间:2016-09-10 03:18:21

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

当我尝试提交使用array value的{​​{1}}时,我遇到了一个问题,即它没有收到array value

这是我的代码:

这是checkbox档案:

migration

这是create_table :users do |t| t.string :email, null: false, default: "" t.string :encrypted_password, null: false, default: "" t.text :receive_mail, array: true, default: [] ... 我将function

array attributes

这是def configure_sign_up_params devise_parameter_sanitizer.permit(:sign_up, keys: [ :address, {receive_mail: []} ]) end 档案:

view

当我提交时,我检查了<div class="field"> <%= f.collection_check_boxes(:receive_mail, [[0, "receive new article"], [1, "receive new ebook"]], :first, :last, include_hidden: false) do |b| %> <%= b.label {b.check_box + b.text} %> <% end %> </div> ,其值为params,但当我检查"receive_mail"=>["0", "1"]时,它始终返回permited

我不明白为什么它没有收到价值。

任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:0)

我认为您的问题源于您使用keys选项,该选项似乎只接受符号列表。您可以尝试使用:

devise_parameter_sanitizer.permit(:sign_up, keys: [
  :address,
  :receive_mail
])

但是,我认为您会遇到Devise docs中提到的以下问题:

  

如果您有一些复选框表示用户可以注册的角色,浏览器会将选中的复选框作为数组发送。数组不是强参数允许的标量之一,因此我们需要按以下方式配置Devise ...

鉴于此,这是基于可能工作的文档示例的代码变体:

devise_parameter_sanitizer.permit(:sign_up) do |user_params|
  user_params.permit({receive_mail: []}, :address)
end