Ruby on rails - 如何在控制器中检查由简单表单创建的单选按钮?

时间:2012-10-28 12:29:00

标签: ruby-on-rails ruby-on-rails-3 simple-form

我构建了一个视图来创建问题和答案。这是我的问答模型:

class Question < ActiveRecord::Base
  attr_accessible :content

  belongs_to :topic
  belongs_to :user
  belongs_to :question_type
  has_many :answers, dependent: :destroy
  accepts_nested_attributes_for :answers
end

class Answer < ActiveRecord::Base
  attr_accessible :content

  belongs_to :question
end

我的答案模型还有一个名为correct的属性boolean,如果答案正确,则设置为true,默认为false。我已经构建了一个表单来创建一个真/假的问题:

<%= simple_form_for @question do |q| %>

  <%= q.input :content, input_html: { rows: 3, class: 'span6' } %>
  <%= q.input :mark, input_html: { class: 'span1' } %>
  <%= q.association :topic %>
  <%= q.association :question_type %>

  <%= q.simple_fields_for :answers do |a| %>

    <%= a.input :correct, collection: [[true, 'True'], [false, 'False']],
                                                            as: :radio_buttons,
                                                            label: 'Answer',
                                                            value_method: :first,
                                                            label_method: :last,
                                                            item_wrapper_class: 'inline'
                                                            %>

  <% end %>
<% end %>

在视图中呈现时的正确属性具有以下html:

<label class="radio inline"><input class="radio_buttons optional" id="question_answers_attributes_0_correct_true" name="question[answers_attributes][0][correct]" type="radio" value="true">True</label>

<label class="radio inline"><input checked="checked" class="radio_buttons optional" id="question_answers_attributes_0_correct_false" name="question[answers_attributes][0][correct]" type="radio" value="false">False</label>

现在在控制器中我想检查选中哪个单选按钮及其值。有没有方法可以检查是否检查了correct属性及其在控制器中的值?

2 个答案:

答案 0 :(得分:2)

params[:question][:answers_attributes][0][:correct]的值为true或false。由于params[:question][:answers_attributes][0][:correct]只有一个值。您可以找到用户选择的值。

只有选定的单选按钮的值才会发送到服务器。

答案 1 :(得分:1)

你必须遍历params [:question] [:answers_attributes]以检查是否选中了单选按钮。你可以这样做,

params[:question][:answers_attributes].collect do |answer_attribute|
     answer_attribute if answer_attribute.last["correct"] == true
end.compact

这将返回一组答案属性,这些属性被更正为true。