18

私はこの単純な選択タスクで立ち往生しています。私はこのモデルを持っています:

#  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答えかをラジオ ボタンで選択したい。コントローラーのアクションには、次のものがあります。contentAnswercorrectnew

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

どうもありがとうございました!

4

4 に答える 4

6

name オプションを radio_button メソッドに渡すことができます。

<%= choice_fields.radio_button :correct, true, :name => "choices_attributes" %>

(レールのドキュメントから、http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html : radio_button(object_name, method, tag_value, options = {}) )

お役に立てれば。

于 2011-09-11T21:09:47.110 に答える
1

これは答えではありませんが、Formtasticを試してみることをお勧めします。このようなネストされたモデルを簡単に処理できます:https ://github.com/justinfrench/formtastic

于 2011-02-23T18:22:54.370 に答える