0


0

Railsリレーションシップモデリング

usersテーブルとgiftsテーブルがあります。 ユーザーは友達にプレゼントを選ぶことができます。 どのユーザーがどのギフトを誰のために選んだかを追跡するために、ユーザーIDとギフトIDを保存するテーブルを作成することを考えています。 この関係をモデル化する方法は? ユーザーとギフトにはHABTMの関係があると思います。 その通りですか?

2 Answer


2


これを試して:

class User < ActiveRecord::Base
  has_many :user_gifts
  has_many :gifts, :through => :user_gifts

  has_many :rcvd_user_gifts, :class_name =>"UserGift", :foreign_key => :friend_id
  has_many :rcvd_gifts, :through => :rcvd_user_gifts, :source => :gift
end

class UserGift < ActiveRecord::Base
  # user_id
  # friend_id
  # gift_id

  belongs_to :user
  belongs_to :friend, :class_name => "User"
  belongs_to :gift

end

class Gift < ActiveRecord::Base
  has_many :user_gifts
  has_many :senders, :through => :user_gifts, :source => :user
  has_many :receivers, :through => :user_gifts, :source => :friend
end

次の呼び出しが可能になりました。

user.gifts      # Gifts given by a user:
user.rcvd_gifts # Gifts received by a user:
gift.senders    # Users sending a gift
gift.receivers  # Users receiving a gift

user_gifts`テーブルの user_id`、 friend_id、` gift_id`カラムにインデックスを付けてください。


0


まず、ユーザー→フレンド、ユーザー→ギフトの3者間の関係です。

has_many:throughを使用して、友人のIDを保存します。 クエリするのは少し厄介ですが、動作するはずです。