2016-09-10 69 views
-1

我有一个问题,它没有收到array value当我试图提交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,它总是返回"receive_mail"=>[]

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

任何帮助将不胜感激。

回答

0

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

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

不过,我想你会遇到下面的问题,在Devise docs提到:

如果你有一些复选框表达用户可以采取的作用注册时,浏览器会将这些选中的复选框作为数组发送。数组不强参数允许标量一个,所以我们需要配置设计以下列方式...

鉴于此,这里是你的代码的基础上从文档的例子一个变种,威力工作:

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

谢谢你的回答,我试过了,但没有奏效。 –