我正在构建一个调查应用程序,该应用程序的一部分有两个模型:
#ResponseSet
has_many :responses
accepts_nested_attributes_for :responses
#Response
belongs_to :response_set
belongs_to :answer
例如,您可能会有一个带有多项选择问题的调查,您可以在其中选择多个答案(您有哪些类型的宠物?狗,猫,马)。
应该发生的是,当您提交调查答案时,会在每个答案的Response
表中添加一条记录。因此,如果您选择了您有狗,猫和马,则会添加3条记录,每条记录都会通过Answer
引用:answer_id
模型。
我可以用一个答案来解决问题,但是那些有多个答案的问题会打破我的大脑。
它变得更加复杂,因为在一次调查中可能存在多个问题,每个问题都有多个答案。
作为参考,当前表单字段名称如下所示:
response_set[responses_attributes][0][answer_id]
response_set[responses_attributes][1][answer_id]
response_set[responses_attributes][2][answer_id]
由此产生:
<%= form_for @response_set, :url => complete_survey_path do |f| %>
<%= f.fields_for :responses do |response| %>
<%= response.check_box :answer_id %>
<% end %>
<% end %>
因此,对于3个不同的问题,它应该是response_attributes中answer_id
的字段。
答案 0 :(得分:1)
如果没有看到Answer的关联,创建动作的代码以及完整生成的HTML,问题似乎有点模糊,但我相信Shelly Roche的this article提供了解决问题的方法 - 也许对你的模型关联进行一些重构(即ResponseSet has_many:respon,:through =&gt;:answers)。
不幸的是,她提供的她的form.fields_for片段似乎不完整; HAML以break标记结束,但是,在HTML中,键位(隐藏输入字段,隐藏与复选框关联的属性)位于break标记之后。
另外,我不能说保存响应时是否会自动拾取包含id的隐藏字段,或者是否需要从params中提取字段并手动处理它们。
但我敢打赌,如果你想对她的帖子发表评论,Shelly Roche会愿意为你填写这些片段。