0

フォトグラファーとピクチャーの 2 つのモデルがあります。写真家には複数の写真があり、写真は写真家に属します。したがって、モデル Photographer I は has_many:pictures というポリシーを実装し、モデル Picture には :photographer に属します。

ここで大丈夫です。ただし、写真家はあなたのプロフィールのカバー用に写真を選ぶことができます。そこで、フィールド cover_id をテーブルに追加し、モデル Photographer belongs_to :cover, class_name: "Image" を指定しました。私の問題は、この関係をもう一方の端であるモデル Picture に表示する方法です。このモデルは、属している :photographer との関係を既に持っています。

これが事実であることを示す画像フィールドを追加すると思いましたが、このソリューションは同じ写真家のカバー以上のものを可能にします.

質問を補足すると、Rails では関係の両端を義務的に指定する必要がありますか?

Tks

4

1 に答える 1

4

まず、(プロフィール)写真は写真家を所有していないと主張します。代わりに、フォトグラファーは 1 枚のプロフィール写真を用意する必要があります。そして、この同じタイプのオブジェクトは、写真家が所有しているがプロフィール写真以外の目的で使用する写真の役割を果たすこともできます. STIは理にかなっていると思います。

class Photographer < ActiveRecord::Base
  has_many :pictures
  has_one :profile_picture
end

class Picture < ActiveRecord::Base
  belongs_to :photographer
end

class ProfilePicture < Picture
  belongs_to :photographer
end

このようにして、写真家に 1 つのプロフィール写真を割り当てるだけでなく、同じデータベース テーブルを使用して両方の類似モデルに多くの写真を作成することができます。

photographer = Photographer.create!
profile_picture = ProfilePicture.create!

photographer.profile_picture = profile_picture
photographer.save!

photographer.pictures.create!    
photographer.pictures.create!
photographer.pictures.count #=> 3
于 2013-05-20T20:46:07.567 に答える