我尝试为以下方案设置关联 (from The Odin Project):
"你喜欢主持人们共进晚餐,所以你想建立一个晚宴邀请网站。用户可以创建聚会,邀请人参加聚会,并接受邀请给其他人的聚会。"
我想出了下面的代码,但有几个问题:
class User < ActiveRecord::Base
has_many :parties, foreign_key: :host_id
has_many :invitations_sent, class_name: "Invitation", foreign_key: :host_id
has_many :invitations_rcvd, class_name: "Invitation", foreign_key: :guest_id
has_many :guests, through: :invitations_sent
has_many :hosts, through: :invitations_rcvd
end
class Invitation < ActiveRecord::Base
belongs_to :host, class_name: "User"
belongs_to :guest, class_name: "User"
belongs_to :party
end
class Party < ActiveRecord::Base
belongs_to :host, class_name: "User"
has_many :invitations
end
有没有更清洁的方法来实现上述目标?似乎用户模型做了很多,但我想知道是否值得将它分成单独的Guest和Host模型,特别是如果它们具有相同的属性/列,无论如何。
< / LI>是否可以更新上面的代码,以便像User.first.parties.first.invitations.create(guest_id: 2)
这样的表达式使用User.first
的ID自动填充新邀请实例的host_id?