0

我有三个模型:User, Song,Album

一个User has_many :songs, :albums

一个Song belongs_to :user, :album

一个Album belongs_to :user, has_many :songs

当我执行以下操作时:

user = User.find(:first)
album = user.albums.find(:first)
album.songs.create(params)

它可以正常工作并使用正确设置Song的外键创建一个新的album_id,但它不会将user_id歌曲设置为User创建它的人。这是正常的吗?我怎样才能创建一个新的Song并确保它同时应用album_iduser_id

我想我可以让一个用户创建一个Song然后选择一个Album来添加它?

4

1 回答 1

0

那里没有与用户的链接。您实例化了一个为该用户设置了 user_id 的专辑对象,但这并不意味着 ActiveRecord 会自动将确切的 user_id 设置为为该专辑创建的歌曲。对于大多数应用程序来说,这确实是出乎意料的行为。

在您的情况下,您可以将用户传递给 create 方法

就像是:

album.songs.create(params.merge({:user => user}))

无论如何,这听起来应该重构。您在哪里调用该代码,是在歌曲创建操作中吗?您从请求中获得的确切参数是哪些,为什么不使用 params[:song] 创建属性?

于 2012-04-19T02:01:13.990 回答