我正在尝试创建一个基本的调查应用。在我的调查页面中,我循环并将每个答案选项显示为单选按钮或复选框作为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保存到选项中以便实际创建选择?
谢谢!
答案 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 %>