【发布时间】:2013-08-30 11:14:16
【问题描述】:
我有两张桌子,users 和 couples。 couples 表有一对外键 lead_id 和 follow_id 指向 users 表。我希望User 类与Couple 有一个has_many 关联,它选择给定用户是领导或关注的所有夫妇。我可以使用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 对象。有没有(不推荐的)方法可以做到这一点?
对不起,如果标题不清楚,我愿意接受建议。
【问题讨论】:
-
也许您可以尝试使用 Couple class_name 并将其加入
users表,而不是使用 User class_name 加入couples
标签: sql ruby-on-rails activerecord