【发布时间】:2010-09-14 18:25:27
【问题描述】:
我有一个用户表和一个礼物表。用户可以为他们的朋友挑选礼物。我正在考虑创建一个表来存储用户 ID 和礼物 ID,以跟踪哪个用户为谁挑选了哪个礼物。如何建模这种关系?我认为用户和礼物有 HABTM 关系。对吗?
【问题讨论】:
标签: ruby-on-rails database-design relationship
我有一个用户表和一个礼物表。用户可以为他们的朋友挑选礼物。我正在考虑创建一个表来存储用户 ID 和礼物 ID,以跟踪哪个用户为谁挑选了哪个礼物。如何建模这种关系?我认为用户和礼物有 HABTM 关系。对吗?
【问题讨论】:
标签: ruby-on-rails database-design relationship
试试这个:
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 列。
【讨论】:
嗯,首先这是一个三向关系,因为你有用户 -> 朋友,还有用户 -> 礼物。
我会使用 has_many :through 并将朋友的 ID 存储在那里。查询起来会有点尴尬,但应该可以。
【讨论】: