我有两张桌子,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
对象。有没有(不推荐的)方法可以做到这一点?
抱歉,如果标题不清楚,我愿意接受建议。