我有两个表,users
和couples
。 couples
表有一对外键lead_id
和follow_id
,它们指向users
表。我希望User
课程与has_many
有一个Couple
关联,该关联会选择给定用户为潜在客户或跟随者的所有夫妻。我可以使用finder_sql
和SQL这样做:
has_many :couples, class_name: 'Couple', finder_sql:
proc { <<-SQL
SELECT couples.* FROM users
JOIN couples ON (couples.lead_id = users.id
OR couples.follow_id = users.id)
WHERE users.id = #{self.id}
SQL
}
这很好用,但:finder_sql
显然已被弃用,所以我正在寻找另一种方式。我得到的最好的是使用这样的自定义关联范围:
has_many :couples, -> {
joins('JOIN couples ON (couples.lead_id = users.id OR couples.follow_id = users.id)')
.select('couples.*')
}, class_name: 'User', foreign_key: 'id'
但是这会导致ActiveRecord返回User
个对象而不是Couple
个对象。是否有(非弃用的)方法?
如果标题不清楚,我很抱歉,我愿意接受建议。
答案 0 :(得分:0)
仔细阅读文档(http://guides.rubyonrails.org/association_basics.html),您可能能够解决这个问题:
用户模型:
has_many: :couples, as: lead
Has_many: :couples, as: follow
夫妻模特:
belongs_to :users
另外,如果您试图联系领导者和粉丝,请查看自我加入部分。
希望这有帮助。