2016-09-10 67 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

謝謝你的回答,我試過了,但沒有奏效。 –