当我尝试提交使用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
。
我不明白为什么它没有收到价值。
任何帮助都会非常感激。
答案 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