私は、ユーザーモデルとムービーモデルだけでなく、それらを格納するテーブルを持っているとしましょう。 watchlist_moviesという3番目のテーブルを追加してウォッチリスト機能を追加したいとしましょう。これは単にuser_idをmovie_idにマッピングします。Railsアソシエーションに特定の名前を使用して別の名前のモデルにアクセスさせるにはどうすればよいですか?
ここで、watchlist_movieモデルを追加します。私はuser.watchlist_moviesでActiveRecordを照会し、ムービーオブジェクトのコレクションを取得できるようにしたいと考えています。これまでのところ、私は(user.rbに)
has_many :watchlist_movies
と
has_many :movies, through: watchlist_movies
を試してみたの記録と第二を返すuser.watchlist_moviesの最初の結果がで映画のレコードのコレクションを返します。 user.movies。基本的に私が望むのは、user.watchlist_moviesがムービーレコードのコレクションを返すことです。そのため、最初のリレーションシップで定義されたアクセス権を使用して、2番目のリレーションシップのコンテンツを返します。これはどうすればいいですか?
私はこの関係をモデル化する最良の方法が何であるかについてはっきりしていません。あなたはhas_many:movies:watchlist_moviesが理想的だと言っていますか? –
あなたのオリジナルの質問には教科書的なやり方があります。あなたに非常に正当な理由がない限り、名前の変更は避けてください。個人的な好みは、Railsの慣習と矛盾する場合、通常は無視されるべきです。一貫性は将来の驚きを少なくします。今は奇妙なことに気付くかもしれませんが、ほとんどのRails開発者はあなたのコードを正確に予想通りに見つけ出します。 'user.watchlist_movies'を呼び出してムービーモデルを元に戻すことは、あなたの命名規則に精通していない人にとっては本当に混乱します。 – tadman
十分に公正。もし私がそのルートに行くなら、watchlist_moviesモデルを持っているべきですか?モデルなしの結合テーブルを持っていて、has_and_belongs_to_many結合を使用できませんでしたか? また、user.moviesを使用したくない理由の1つは、将来他のリストがある可能性があるからです。彼らは他の団体を通じて映画を持っていただろう。 –