0

UserSong、 の3 つのモデルがあります。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_idUserSongalbum_iduser_id

ユーザーに a を作成してから、それを追加する aSongを選択させることができると思いますか?Album

4

1 に答える 1

0

そこにはユーザーとの連鎖はありません。そのユーザーに設定された user_id を持つアルバム オブジェクトをインスタンス化しましたが、それは ActiveRecord がその正確な user_id をそのアルバム用に作成された曲に自動的に設定するという意味ではありません。これは、ほとんどのアプリケーションにとって本当に予期しない動作です。

あなたの場合、ユーザーを create メソッドに渡すことができます

何かのようなもの:

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

とにかく、それはリファクタリングする必要があるようです。そのコードをどこで呼び出していますか? 曲の作成アクション内にありますか? リクエストから取得した正確なパラメーターはどれですか? create 属性に params[:song] を使用しないのはなぜですか?

于 2012-04-19T02:01:13.990 に答える