【发布时间】:2016-10-23 16:03:10
【问题描述】:
我创建了三个模型,“调查”、“问题”和“答案”。调查 has_many Questions which has_many Answers(它们都属于上面的模型)。
这是我想显示问题并提交用户输入的表单:
<%= form_for(:quiz_responses, url: quiz_responses_path) do |f| %>
<%= f.hidden_field :name, value: @survey.name %>
<% @questions.each do |question| %>
<ul>
<%= f.hidden_field :question, value: question.content %>
<%= f.label question.content %>
<% question.answers.each do |answer| %>
<%= f.hidden_field :answers, value: answer.content %>
<%= f.label answer.content %>
<%= f.radio_button(:user_answer, answer.content) %>
<% end %>
它有几个问题:
如果我创建了多个问题,例如 2 个问题,我将获得 8 个单选按钮,每个问题有 4 个(预期结果)。但是,我只能从 8 个单选框中选择一个(而不是每个问题的 4 个单选框中的一个),并且只提交了一个
:user_answer值。我该如何解决这个问题?这很可能与#1 相关,但
<%= f.hidden_field :answers, value: answer.content %>在我提交表单时只产生一个值(最后一个答案值)。我希望它提交所有答案值(所以如果我有 2 个问题,我将得到一个包含 8 个答案值而不是 1 个的参数哈希)。<%= f.hidden_field :question, value: question.content %> 也会出现类似的问题
【问题讨论】:
-
您应该观看这两个链接以了解嵌套字段:railscasts.com/episodes/196-nested-model-form-part-1、railscasts.com/episodes/197-nested-model-form-part-2。我认为这正是你的情况。
-
我应该澄清一下。我在创建调查的表单中使用了嵌套字段。我在上面发布的表单是在创建调查之后,我在其中显示用户输入的调查。我不知道嵌套表单是否是最好的方法。
-
如果您保存了调查,那么为什么需要 form_for 来显示它?目前尚不清楚您要在这里实现什么,但如果没有嵌套表单,您很可能会为字段或其他内容获得重复的 id。我仍然建议您观看那些 railscasts。该网站对初学者非常有用。
-
我确实看过他们。有两种 form_for,因为它们执行不同的操作:一种形式是让我创建测验、添加问题和答案。第二种形式是显示测验问题和答案并获得用户输入(即选择他们认为正确的答案)。不过我想我现在知道该怎么做了。
-
好吧,查看您的服务器日志以查看您真正将多少问题/答案保存到数据库中,并查询您的数据库以确认。您还可以尝试为每个 user_answer 创建一个单独的表单。不幸的是,您的问题没有提供足够的信息来说明可能出现的问题,因为这取决于保存的内容以及模型的外观。
标签: ruby-on-rails