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' –