在表单中重用另一个控制器的现有嵌套属性

时间:2012-11-29 23:14:40

标签: ruby-on-rails ruby-on-rails-3 nested-attributes

我正在尝试为学生制作表格参加考试(有多项选择题)。

以下是相关模型:

Exam has_many :questions
     has_one :grade
     accepts_nested_attributes_for :questions
Question has_many :answers
     accepts_nested_attributes_for :answers

Grade belongs_to :exam
      belongs_to :subscription

我正在将Simple_form用于我的应用程序表单。进行考试的表格已经完成并使用fields_for和一些javascript(如嵌套表单上的railscast所示)。现在我正在尝试制作参加考试的表格。

唯一的输入是每个问题的一组单选按钮。用户输入将用于计算分数,分数将是保存到成绩模型的唯一信息。我必须承认,我对如何完成这项工作感到茫然。以下是我目前为Grade#new view所做的事情:

<%= simple_form_for [@subscription, @grade], :html => { :class => 'form-horizontal' } do |f| %>
  <fieldset>
    <legend>Exam for <%= @lesson.name.capitalize %></legend>

    <% @questions.each do |question| %>
      <%= simple_fields_for :questions do |builder| %>
        <ol>
          <li>
            <p><%= question.text %></p>
            <%= f.input :answer, :collection => question.answers, :as => :radio_buttons %>
          </li>
        </ol>
      <% end %>
    <% end %>

    <div class="form-actions">
      <%= f.submit "Submit Exam", :class => "btn btn-primary" %>
      <%= link_to "Cancel", lesson_exam_path(@lesson, @exam), :class=>"btn" %>
    </div>
  </fieldset>
<% end %>

这会产生一个看起来正确的形式(好吧,主要是反正),但单选按钮都是一组的一部分。当在一个问题上选择答案时,它会从所有其他问题中取消选择答案,因为它们属于同一组。以下是生成的相关HTML:

<input class="radio_buttons optional" id="grade_answer_31" name="grade[answer]" type="radio" value="31"/>

这里的问题当然是name= html属性。它指的是等级。 我需要它像name="grade[:question_id][:answer_id]"如果我有这个,我可以在控制器中轻松收集信息并进行必要的计算。

我正在grade_controller上查看,因为成绩最终会被创建,但问题和答案会嵌套在考试模型下,这让我对这个表单/操作应该驻留的位置感到有些困惑。我是否可以对take_exam进行exams_controller操作并处理从那里创建成绩?

1 个答案:

答案 0 :(得分:0)

好的,所以我的问题是双重的:

1。)在我的radio_buttons输入中,我错误地使用了来自f来自form_for的{​​{1}}变量而不是builder 2.)我改变了fields_for

fields_for

调用<%= simple_fields_for "questions[#{question.id}]" do |builder| %> 就像我想要的那样以fields_for格式制作所有radio_button输入的哈希值。