2011-06-27 136 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會願意爲您完成代碼片段。