我有两个模型:公司和用户
情况就是这样:
定义关系的最佳方式是什么?连接模型的外观如何?
此外,在解决此类情况时是否有任何最佳做法?
更新
对不起,早些时候没有提到过。我知道可用的各种关系类型。我的问题是'哪个最合适'?
答案 0 :(得分:3)
关于你的问题,我建议你浏览几个Railscasts视频:
这在RubyonRails网站上有很好的描述
我想说看看你的情况:
答案 1 :(得分:2)
由于多态关联,我们可以将所有关系放在一个表中,如下所示:
create_table :follows do |t|
t.references :followable, :polymorphic => true
t.references :followed_by, :polymorphic => true
end
然后模型是:
class User < ActiveRecord::Base
has_many :following_objects, :class_name => 'Follow', :as => :followed_by
has_many :followed_objects, :class_name => 'Follow', :as => :followable
end
class Company < ActiveRecord::Base
has_many :following_objects, :class_name => 'Follow', :as => :followed_by
has_many :followed_objects, :class_name => 'Follow', :as => :followable
end
class Follow < ActiveRecord::Base
belongs_to :followable, :polymorphic => true
belongs_to :followed_by, :polymorphic => true
end
抱歉丑陋的名字。
答案 2 :(得分:1)
一个基本想法是使用两个自引用关联:
<强>模型/ user.rb 强>
has_many :friendships
has_many :friends, :through => :friendships
has_many :inverse_friendships, :class_name => "Friendship", :foreign_key => "friend_id"
has_many :inverse_friends, :through => :inverse_friendships, :source => :user
models / friendship.rb
belongs_to :user
belongs_to :friend, :class_name => "User"
<强>模型/ company.rb 强>
has_many :partnerships
has_many :partners, :through => :partnerships
has_many :inverse_partnerships, :class_name => "Partnership", :foreign_key => "partner_id"
has_many :inverse_partners, :through => :inverse_partnerships, :source => :company
models / partnership.rb
belongs_to :company
belongs_to :partner, :class_name => "Company"
和一对多关联:
models / user.rb
has_and_belongs_to_many :companies
models / company.rb
has_and_belongs_to_many :users
因此,对于此实现,如果您使用的是RDBMS,则需要5个表(用户,友谊,公司,合作伙伴和公司用户)。
你可以在这个截屏视频中找到一个很好的例子:
http://railscasts.com/episodes/163-self-referential-association