私はこの単純な選択タスクで立ち往生しています。私はこのモデルを持っています:
# id :integer(4) not null, primary key
# category :string(255)
# content :text
class Question < ActiveRecord::Base
has_many :choices, :dependent => :destroy
accepts_nested_attributes_for :choices
end
# id :integer(4) not null, primary key
# content :text
# correct :boolean(1)
# question_id :integer(4)
class Choice < ActiveRecord::Base
belongs_to :question
end
新しい質問を作成する際に、 だけでなく 3 つのオブジェクトの もネスト形式で指定し、content
どれがQuestion
答えかをラジオ ボタンで選択したい。コントローラーのアクションには、次のものがあります。content
Answer
correct
new
def new
@title = "New Question"
@question = Question.new
3.times { @question.choices.build }
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @question }
end
end
これはフォームコードです:
<%= simple_form_for @question do |question_form| %>
<%= question_form.error_notification %>
<div class="inputs">
<%= question_form.input :content, :label => 'Question' %>
<%= question_form.input :category, :collection => get_categories, :include_blank => false %>
<% @question.choices.each do |choice| %>
<%= question_form.fields_for :choices, choice do |choice_fields| %>
<%= choice_fields.input :content, :label => 'Choice' %>
<%= choice_fields.radio_button :correct, true %>
<%= choice_fields.label :correct, 'Correct Answer' %>
<% end %>
<% end %>
</div>
<div class="actions">
<%= question_form.button :submit %>
</div>
<% end %>
問題は、このコードが異なる名前の 3 つのラジオ ボタンを生成することです。複数の正解を選択できますが、これは正しい動作ではありません。3 つのラジオ ボタンの名前はquestion[choices_attributes][0][correct]
、question[choices_attributes][1][correct]
およびquestion[choices_attributes][2][correct]
です。
問題は、正しい答えを 1 つだけ選択するために、同じ名前のラジオ ボタンを 3 つ作成するにはどうすればよいかということです。この方法でアクションにparams
保存するために、正しい配列を作成するにはどうすればよいですか:create
def create
@question = Question.new(params[:question])
# render or redirect stuff....
end
どうもありがとうございました!