0
私はレール5でクイズアプリを作成しています。ユーザーはデータベースから複数の選択肢の質問を受け取ります。質問ごとに、ユーザーは単一のオプション(ラジオボタン)または複数のオプション(チェックボックス)のいずれかを選択できます。これはブール値フィールド 'multiselect'としてdbに格納されます。強力なパラメータを使用してフォームの値を入力する
私はフォームを作成するためにform_forを使用しています。コントローラで
<div class="answer-box">
<% if m.object.multiselect %>
<%= m.collection_check_boxes :answer, m.object.options, :id, :option_text, { checked: m.object.options.first.id } %>
<% else %>
<%= m.collection_radio_buttons :answer, m.object.options, :id, :option_text, { checked: m.object.options.first.id } %>
<% end %>
<%= m.hidden_field(:question_id, value: m.object.id) %>
<%= m.hidden_field(:question_type, value: 'Mcq') %>
</div>
次のように、私はparamsハッシュを許可しました:質問は複数選択する場合
def response_params
params.require(:quiz).permit(
{
mcq_responses_attributes: [
:question_id,
:question_type,
answer: []
]
})
end
問題は、次のとおりです。答えは配列であり、それがシングルのとき選択:答えは整数です。私がしたことは、答えが:配列であるかどうかをチェックし、そうでなければ、配列に単一の整数を変換し、上記の関数を使用してそれを許可することです。
def create_answer_array
params[:quiz][:mcq_responses_attributes].each do |k, r|
r[:answer] = Array(r[:answer]) unless r[:answer].is_a? Array
end
end
これを行うより良い方法はありますか?
私は、ネストされたのparamsを追加するために自分のコードを編集しました。あなたの答えに 'response_params'のパラメータをループさせる必要がありますか? – meris1889