2011-06-27 112 views
2

我构建的应用程序进行了调查程序和部分创建多个记录有两种型号:在嵌套形式

#ResponseSet 
has_many :responses 
accepts_nested_attributes_for :responses 

#Response 
belongs_to :response_set 
belongs_to :answer 

举个例子,你可能有一个选择题,你可以一个调查选择多个答案(你有什么类型的宠物?狗,猫,马)。

应该发生的情况是,当您提交调查问卷的答案时,会为每个答案在Response表中添加一条记录。因此,如果您选择了狗,猫和马,则会添加3条记录,每条记录都通过:answer_id引用Answer型号。

我可以用一个答案来解答问题,但有多个答案的答案正在打破我的大脑。

它变得更加复杂,因为在单个调查中可能有多个问题,每个问题都有多个答案。

仅供参考,当前表单域的名称是这样的:

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 %> 

所以这会是在response_attributes 3个不同的问题,为answer_id领域。

+0

你看过http://railscasts.com/episodes/196-nested-model-form-part-1集吗?它解释了同一主题的嵌套形式。 – felix

+0

我确实。这不是同一个问题(据我所知)。我在问如何获取已经存在的记录的ID作为字段名称的一部分(参见我的示例)。 – Shpigford

+0

如果'1234'是你的答案的'id','response_set [responses_attributes] [0] [1234] [answer_id]'看起来很像'response_set [responses_attributes] [0] [answer_id] [answer_id]''。这对我来说并不合适。 – Luke

回答

1

这个问题似乎有点模糊,我没有看到答案,创建操作的代码和完整生成的HTML的关联,但我相信谢尔利罗氏的this article为您的问题提供了一个解决方案 - 可能与一些重构到您的模型关联(即ResponseSet has_many:responses,:through =>:answers)。

不幸的是,她提供的form.fields_for片段似乎不完整; HAML以中断标记结束,但在HTML中,关键位(标识与复选框相关联的属性的隐藏输入字段)出现在中断标记之后。

此外,我不能说在保存响应时是否会自动拾取包含ID的隐藏字段,或者是否需要将字段从参数中拉出并手动处理。

但是我敢打赌,如果您喜欢评论她的帖子,Shelly Roche会愿意为您完成代码片段。