Rails form_for check_box

时间:2014-02-26 01:36:10

标签: ruby-on-rails

我正在尝试创建一个基本的调查应用。在我的调查页面中,我循环并将每个答案选项显示为单选按钮或复选框作为form_for以创建用户的选择。选择对于单选(或单选按钮)的问题非常有用,但是对于多选问题它们并不节省。我非常确定这与我对复选框的格式有关。

好像我应该这样做

<%= f.check_box :answer_id, answer.id %> <%= answer.title %> <br>

类似于我创建单选按钮的方式,但会引发错误

undefined method `merge' for 14:Fixnum

这是我的代码显示:

<h3>Questions:</h3>
<ul><% @survey.questions.each do |question| %>
    <li><p><%= question.title %></p></li>
    <% choice = question.choices.build %>
    <% if question.single_response == true %>
    <%= form_for [question, choice] do |f| %>

            <% question.answers.each do |answer| %>
            <%= f.radio_button :answer_id, answer.id %> <%= answer.title %><br>
            <% end %>
            <%= f.hidden_field :survey_id, value: @survey.id %>
            <%= f.submit %>
            <% end %>

            <br />
            <% else %>
                <%= form_for [question, choice] do |f| %>
                    <% question.answers.each do |answer| %>
                    <%= f.check_box :answer_id %> <%= answer.title %> <br>
                    <%= f.hidden_field :survey_id, value: @survey.id %>
                    <% end %>
                    <%= f.submit %>
            <% end %>
            <br />
        <% end %>
<% end %>
</ul>

知道我需要做些什么才能将answer_id保存到选项中以便实际创建选择?

谢谢!

2 个答案:

答案 0 :(得分:1)

对于复选框,您实际上希望返回一个数组作为参数。这有一个有趣的语法,因为我们实际上并不想使用表单生成器方法。它应该看起来像这样(适应您的特定型号名称和方法)

<%= check_box_tag 'choice[answer_ids][]', answer.id %>

使用此语法应该告诉Rails将所有选中的复选框值编译到数组中。

This Railscast讨论了这个主题。

答案 1 :(得分:0)

这个问题已经有几年了,但我认为应该有更好的答案。由于您使用的是form_for(模型支持的表单),因此您可能希望使用最初尝试使用的form_for check_box方法。在你的情况下,它看起来像这样:

<%= f.check_box :choice, { :multiple => true }, answer.id, false %>

Here is the doc on this.