2010-12-13 55 views
3

我想爲fields_for使用額外的集合。這個集合應該在fields_for中使用所有的可能性。rails:fields_for和collection

可以說我有一個人在同一天每週定期發生的任務。在人形式中,即使沒有任何已保存的任務,我也應該每天都有條目。我試過了:

<% form_for(@person) do |f| %> 
... 

    <% f.fields_for :tasks, @weekdays do |task_fields| %> 
    <%= weekday.name %>: 
    <%= project_fields.text_field :name %> 
    <% end %> 
<% end %> 

現在應該爲每個工作日一個文本字段輸入當天的任務名稱。例如weekday.name =「monday」和task.name =「喝咖啡」,task.weekday_id = 1

+0

不知道你在問什麼。你是否遇到了一些你不明白的錯誤?如果你問如何實現某些東西,也許你可以更具體或者提供一些解釋。 – Samo 2010-12-13 17:22:17

+0

您是否實際上使用默認的,開始的數據填充了@weekdays? – 2011-02-15 15:51:15

+0

有兩件事情,一個'weekday'看起來不像它有價值,你可以使用'task_fields.object.name',兩個我認爲文檔是錯誤的,你不能將一個集合作爲第二個參數傳遞給' fields_for'。調查... – Kris 2012-08-02 10:44:19

回答

0

您不是遍歷week_days。你應該這樣做:

<% @weekdays.each_with_index do |weekday, i| %> 
    <% f.fields_for :tasks do |task_fields| %> 
    <%= weekday.name %>: 
    <%= task_fields.text_field :name %> 
    <%= task_fields.hidden_field :weekday_id, :value => (i + 1) %> 
    <% end %> 
<% end %> 

如果你有一個表,「工作日」,然後hidden_​​field值應爲weekday.id

編輯:7月30日

我覺得我完全搞砸了這個答案。讓我試着改進它。

<% f.fields_for :tasks, @weekdays do |task_fields| %> 
    <%= weekday = task_fields.object %> 
    <%= weekday.name %>: 
    <%= task_fields.text_field :name %> 
    <%= task_fields.hidden_field :weekday_id, :value => weekday.id %> 
<% end %> 
+15

請注意,根據文檔,應該可以指定一個集合作爲OP正在嘗試執行的'fields_for'的第二個參數。根據我的經驗,這似乎被打破了。嘗試使用像'foo_fields.text_field:name'這樣的助手會導致一個異常,例如'' – 2011-06-19 06:02:16

+0

稍微不正確。 A)正如上面提到的,rails支持第二個參數,它定義了要迭代的集合,B)更重要的是,使用這個參數可以確保在使用表單元素時,每個子對象的id屬性都會生成HTML屬性名稱單選按鈕等(例如'person [tasks] [1] [:field_name]')。 還有最後一件事,與這個問題沒有直接關係,但相關。確保在父模型中包含'accep_nested_attributes_for:'。否則,它不會以一種明顯的方式失敗,但你將被留在你的頭髮外面。 – user2490003 2017-07-25 23:38:01

+0

說實話,我認爲我完全錯過了這個答案中的問題的重點,並且是非常錯誤的:D – rubyprince 2017-07-27 06:56:54