一連の画像と 1 つの注目の画像を含む投稿を含むブログに似た Rails プロジェクトがあります。複数の投稿で同じ画像を共有でき、1 つの投稿で多くの画像を使用できるため、画像セットは非常に単純な HABTM 関係でしたが、主役の画像は少し厄介でした。
すべての投稿にはアイキャッチ画像が 1 つだけある必要があり、1 つの画像が複数の投稿のアイキャッチ画像になる可能性があるため、最初に考えたのは関係を逆にして、画像has_many
を投稿して画像を投稿belong_to
できるようにすることでしたが、それはさまざまな点で問題があるようです。 . まず、あまりセマンティックではありません。2 つ目は、post.new が image_id を属性として受け入れたくないように見えるため、post コントローラーが image_id の値を受け入れる追加のコードを必要とすることです。
私の 2 番目の考え (これは私がこれまで行ってきたことですlimit: 1
) は、投稿の指定子has_and_belongs_to_many :featured_images
と移行のunique: true
onの両方で HABTM 関係を使用することでしたt.belongs_to :post
。このソリューションは機能しますが、ハックっぽいようです。post.featured_images.first
また、ではなく、このように注目の写真にアクセスする必要があることを意味しますpost.featured_image
。さらに悪いことに、2 つではなく 3 つのテーブルにアクセスする必要があり、ID を介してすぐに識別するのではなく、多対多テーブルで投稿 ID を検索する必要があるため、データベースのパフォーマンスが低下するのではないかと思わずにはいられません。桁。
それで、これはこれを行う正しい方法ですか、それとももっと良い方法がありますか? has_one
レールには,belongs_to_many
関係のようなものがありますか?