4

我有一个 Rails 应用程序,它有一个专辑和歌曲模型,其中有很多关系。我正在尝试使用simple_formnested_form gem 将歌曲添加到专辑中。

如果我使用 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,该关联就可以正常工作。

正确的语法是什么?还是这些宝石不兼容?如果这两个 gem 不兼容,那么您将如何仅使用 nested_form 从专辑中添加和删除歌曲?

/views/albums/_form https://gist.github.com/leemcalilly/51e7c5c7e6c4788ad000

/models/专辑 https://gist.github.com/leemcalilly/9a16f43106c788ab6877

/models/song https://gist.github.com/leemcalilly/0ccd29f234f6722311a0

/models/albumization https://gist.github.com/leemcalilly/c627ad2b178e1e11d637

/controllers/albums_controller https://gist.github.com/leemcalilly/04edf397b2fb2a3d0d1d

/controllers/songs_controller https://gist.github.com/leemcalilly/bcbccc9259c39d0b6b7a

4

1 回答 1

6

表单构建器song_form代表一个Song对象,而不是一个Album,这就是找不到关联的原因。

在下面的块fields_for中,您可以手动为歌曲创建表单。就像@david 在他的评论中提到的那样,您应该使用simple_fields_for而不是fields_for 让所有 simple_form 方法可用。结果是:

<%= 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 %>
于 2013-03-20T16:28:07.567 回答