Rails有很多通过相同的模型

时间:2017-02-03 15:37:16

标签: ruby-on-rails has-many-through

我有一个用户模型和一个seen_contractor模型。我将用户模型视为客户和承包商。客户可以通过访问他们各自的个人资料来查看许多承包商。许多客户可以查看承包商。我在Viewed_contractor中有customer_id和contractor_id。我想把这个关系当作has_many来处理。是否可以彻底通过has_many?

1 个答案:

答案 0 :(得分:1)

有可能。首先,您需要为class_name模型中的belongs_to关联指定ViewedContractor选项,以便它们都引用您的User类。然后,您可以在has_many through:模型中指定User关系。

这样的事情应该有效:

# viewed_contractor.rb
class ViewedContractor < ActiveRecord::Base
  belongs_to :contractor, class_name: 'User', foreign_key: :contractor_id
  belongs_to :customer, class_name: 'User', foreign_key: :customer_id
end

# user.rb
class User < ActiveRecord::Base
  has_many :viewed_contractors_as_contractor, class_name: 'ViewedContractor', foreign_key: :contractor_id
  has_many :viewed_contractors_as_customer, class_name: 'ViewedContractor', foreign_key: :customer_id

  has_many :visited_contractors, through: :viewed_contractors_as_customer, source: :contractor
  has_many :visited_customers, through: :viewed_contractors_as_contractor, source: :customer
end