0
我有两个表格,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
对象。有没有(不推荐)的方式来做到这一点?
对不起,如果标题不清楚,我愿意提供建议。
可能您可以尝试使用Couple class_name并将其加入到'users'表,而不是使用User class_name加入'couples' –