4

我有一個Rails應用程序,擁有一個擁有很多關係的專輯和歌曲模型。我正在嘗試使用simple_formnested_form寶石將歌曲添加到相冊中。如何使用simple_form和嵌套窗體通過關聯爲has_many創建嵌套窗體?

如果我使用simple_form,創建關聯很容易,但是我無法使其與nested_form配合使用。看來這應該工作:

<%= f.fields_for :songs do |song_form| %> 
    <%= song_form.association :songs %> 
    <%= song_form.link_to_remove "Remove this song" %> 
<% end %> 
<p><%= f.link_to_add "Add a song", :songs %></p> 

但我得到這個錯誤:RuntimeError in Albums#new Association :songs not found。如果我只是使用simple_form,該協會工作正常。

正確的語法是什麼?還是這些寶石不相容?如果這兩個寶石不兼容,那麼如何使用nested_form添加和刪除專輯中的歌曲?

/視圖/專輯/ _form https://gist.github.com/leemcalilly/51e7c5c7e6c4788ad000

/模型/專輯 https://gist.github.com/leemcalilly/9a16f43106c788ab6877

/模型/歌曲 https://gist.github.com/leemcalilly/0ccd29f234f6722311a0

/模型/ albumization https://gist.github.com/leemcalilly/c627ad2b178e1e11d637

/控制器/ albums_controller https://gist.github.com/leemcalilly/04edf397b2fb2a3d0d1d

/控制器/ songs_controller https://gist.github.com/leemcalilly/bcbccc9259c39d0b6b7a

+1

你可以發佈你的相冊控制器嗎?它看起來就是錯誤來自的地方。 – 2013-03-17 23:45:55

+0

編輯它以包含我的控制器。 – 2013-03-18 14:38:52

+0

在您的'albuns_controller.rb'的'new'動作中添加一個'@ album.songs.build'。 – MurifoX 2013-03-18 14:42:43

回答

6

表單生成器song_form表示Song對象,而不是一個Album,這就是爲什麼沒有找到相關性。

fields_for後面的塊中,您可以手動創建歌曲的表單。就像他在評論中提到的@david一樣,您應該使用simple_fields_for而不是fields_forto get all simple_form methods available。其結果如下:

<%= f.simple_fields_for :songs do |song_form| %> 
    <%= song_form.input :artwork %> 
    <%= song_form.input :track %> 
    ... 
    <%= song_form.link_to_remove "Remove this song" %> 
<% end %> 
+0

我試圖創建專輯和歌曲之間的關聯,而不是通過專輯表單創建歌曲。我正在用不同的歌曲形式創作歌曲。只要將歌曲的字段作爲輸入,不會創建與預先存在的歌曲的關聯。我試過這個https://gist.github.com/leemcalilly/699cbac054849b407353,但那也給我一個錯誤。是否有一些語法來創建我缺少的關聯?這可能與simple_nested_form_for?如果沒有,那麼正常的rails has_many的語法是什麼:通過這種形式的關聯? – 2013-03-26 19:57:20