私は2つのテーブルを持っていusers
ますcouples
. テーブルには、テーブルを指すとcouples
のペアの外部キーがあります。特定のユーザーがリードまたはフォローしているすべてのカップルを選択する関連付けをクラスに持たせたいと思います。私はこれを次のように SQLを使用して行うことができます。lead_id
follow_id
users
User
has_many
Couple
finder_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
オブジェクトを返します。これを行う(廃止されていない)方法はありますか?
タイトルが不明確で申し訳ありませんが、提案を受け付けています。