2014-02-26 147 views
0

我正在尝试创建一个基本的调查应用程序。在我的调查页面上,我正在循环显示每个答案选项,并将其显示为一个单选按钮或复选框,作为form_for来创建用户的选择。这些选择对于单选(或单选按钮)的问题非常有效,但它们不能保存多选问题。我很确定这与我对复选框的表单有关。Rails form_for check_box

好像我应该做的

<%= 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选择,以便它真正cr吃了选择?

谢谢!

回答

1

对于复选框,您实际上想要返回一个数组作为参数。有一点有趣的语法,因为我们实际上并不想使用表单生成器方法。它应该是这个样子(适应您的具体型号名称和方法)

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

使用这种语法应该告诉Rails编译所有选中的复选框值到一个数组。

This Railscast越过这个话题。

+0

这似乎是抛出一个错误 - 未定义的方法'answer_id []' –

+0

我更新了我上面的答案。您可能需要调整它以使用您自己的模型名称和方法,并且可能必须将“answer_ids”方法添加到代表用户选择的模型中,但希望这会为您提供一般性要点。绝对看Railscast更详细的演练。 –

+0

这很有道理。我总是想知道_tag是干什么的:)。我非常感谢帮助! –