0

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

タイトルが不明確で申し訳ありませんが、提案を受け付けています。

4

1 に答える 1

0

ドキュメント ( http://guides.rubyonrails.org/association_basics.html ) を見ると、これだけで解決できる場合があります。

ユーザー モデル:

has_many: :couples, as: lead
Has_many: :couples, as: follow

カップルモデル:

belongs_to :users 

また、リーダーとフォロワーを関連付けようとしている場合は、自己結合セクションを参照してください。

お役に立てれば。

于 2013-08-30T03:14:16.880 に答える