2016-08-04 6 views
1

保存時:なぜRailsの中に保存し、チェックボックス、ちょうど最後の要素のform_forで正しく

- @questions.each do |secret_question|  

= f.check_box :question, {multiple: true}, secret_question.id, 0 
= f.label  :question, secret_question.body 

私は最後の要素をチェックした場合、保存中 - ベースでは、正しい値を保存し、

が、私は「場合他の要素をチェックしました(最初から最後から2番目まで) - ベースで '0'を保存しました

何が問題なのですか? ありがとう

アップデート1:コントローラで はのparamsを取得:

private 
def contact_params 
    params.require(:contact).permit(:name,... :secret_question) 
end 

アップデート2: 結果形式:

<form id="new_contact" class="new_contact" method="post" accept-charset="UTF-8" action="/contacts" enctype="multipart/form-data" 

<input type="hidden" value="0" name="contact[secret_question][]"></input> 
<input id="secret_question_1" type="checkbox" name="contact[secret_question][]" value="1"></input> 
<label for="secret_question_1">1</label> 

<input type="hidden" value="0" name="contact[secret_question][]"></input> 
<input id="secret_question_2" type="checkbox" name="contact[secret_question][]" value="2"></input> 
<label for="secret_question_2">2</label> 

<input type="hidden" value="0" name="contact[secret_question][]"></input> 
<input id="secret_question_3" type="checkbox" name="contact[secret_question][]" value="3"></input> 
<label for="secret_question_3">3</label> 

<input type="hidden" value="0" name="contact[secret_question][]"></input> 
<input id="secret_question_4" type="checkbox" name="contact[secret_question][]" value="4"></input> 
<label for="secret_question_4">4</label> 
+0

'question.body'の代わりに' secret_question.id'、 'secret_question.body'がある場合、' question.body'フォームが正しく見えます。 form_forによって生成されたparamsとhtmlの入手方法を示してください。 –

+0

そして、どのようにパラメータを保存しますか? –

+0

連絡先コントローラの作成メソッドのcontact.save。 – Vitalina

答えて

1
そのパラメータは配列でなければなりません宣言する

def contact_params 
    params.require(:contact).permit(:name,... :secret_question => []) 
end 

にご

def contact_params 
    params.require(:contact).permit(:name,... :secret_question) 
end 

を変更

+0

あなたの答えは、すべてのチェックボックス要素をparamsから取得することで問題を解決しましたが、それでも私には '0'が表示されます。すべてのチェックボックス要素(1..4)を選択すると、['0'、 '1'、 '0'、 '2'、 '0'、 '3'、 '0'、 ' 4 '、]。 Form_forがすべてのチェックボックス入力要素の前に値 '0'の隠しフィールドを生成する理由を教えてください。ありがとうございます – Vitalina

+0

'f.check_box:question、{multiple:true}、question.id、nil'と書くと隠しフィールドが追加されません –

0

あなたの入力要素が同じname属性があります:contact[secret_question][]を。フォームを送信すると、ブラウザはDOM内にあるすべての入力要素をDOM内にある順序で送信しますが、Railsは同じ名前のキーがある場合は、受け取った最後のキーと値のペアを取り、この値を保存します。この動作はthe way Rails treats checkboxesと競合します。

check_boxの代わりにのオプションを使用するか、check_boxの代わりにを使用できます。 は、問題の原因となっている隠しチェックボックスを生成しません。

関連する問題