如何通过引用同一模型的连接表进行关联?

时间:2017-03-13 15:41:31

标签: ruby-on-rails activerecord

我有一个名为House的模型,我希望能够将房屋相互关联以显示建议。

所以我希望有一所房子,我应该能够问:house.recommended_houses。可以推荐一栋房子供不止一栋房子使用。

我正在考虑建立一个可存储此关联的表格(我还不知道该名称),因此它将包含以下列:

recommended_house_id
recommended_for_house_id

我无法理解如何将其与我的House模型联系起来。这些关联会是什么样的,以及我应该为该连接模型使用什么名称?

2 个答案:

答案 0 :(得分:0)

这应该让你开始:

class House < ApplicationRecord
  has_and_belongs_to_many :recommendations,
      class_name: "House",
      foreign_key: "recommended_by_id",
      association_foreign_key: "recommendation_id"
end

答案 1 :(得分:0)

您所描述的内容称为自引用关联。

您可以设置连接表(推荐)和相关模型:

class Recommendation < ActiveRecord::Base

  belongs_to :house
  belongs_to :recommended_house, :class_name => 'House'

end

然后使用has_many,:通过House模型中的关系来设置您正在寻找的关系。

class House < ActiveRecord::Base

  has_many :recommendations
  has_many :recommended_houses, :through => :recommendations

  has_many :inverse_recommendations, :class_name => "Recommendation", :foreign_key => "recommended_house_id"
  has_many :recommended_by_houses, :through => :inverse_recommendations, :source => :house

end

现在,您可以同时使用house.recommended_houseshouse.recommended_by_houses