0

假设我有两个模型:专辑和歌曲。Album 有album_title 作为它的属性,Song 有song_title 和album_id。
以下是关联:

class Album < ActiveRecord::Base
  has_many :songs, dependent: :destroy
end

class Song < ActiveRecord::Base
 belongs_to :album
end

要创建一首新歌,我需要指定album_id。我想要的是能够创建新歌,在输入字段中输入album_title 而不是album_id,专辑的id 存储在数据库中。

我能够想出这个:

<%= f.select :album_id, Album.all.collect{ |a| [a.album_title, a.id] }  %>

它允许您从列表中选择一个专辑并将其 id 分配给album_id。虽然它确实适用于我的小学期项目,但我想知道是否有可能实现我最初想要的。还是我应该采取一些不同的方法?

4

1 回答 1

0

这种方法没有任何问题。不过,有一些辅助方法可以让你做同样的事情更干净一些:

<%= f.collection_select :album_id, Album.all, :id, :album_title %>

更新

现在我有了更好的理解,您可以使用 text_field_tag 完成此操作:

<%= text_field_tag :album_title %>

在您的控制器中,用于find_or_create获取专辑:

@song = params[:song]
if params[:album_title].present?
  album = Album.find_or_create_by_album_title(params[:album_title])
  @song.album = album
else
  @song.errors.add(:album_id, "cannot be blank")
end

更好的是,将此逻辑移动到歌曲模型中以清理您的控制器。

于 2013-05-22T20:41:14.797 回答