web-dev-qa-db-ja.com

rails has_many:through-throughテーブルに条件を設定することは可能ですか?

2つのモデルがあり、has_many:thoughリレーションを使用してリンクされています。

他のモデルテーブルで条件を検索する:conditionsパラメーターがありますが、結合テーブルで条件を作成する方法はありますか?

たとえば、私が持っているとしましょう:

User
Game
GameUser

ゲームには多くのユーザーがいる可能性があるため、1人のユーザーには多くのゲームがある可能性があります。しかし、たとえばユーザーがそのゲームを好きかどうかなど、追加情報をジョイントテーブルに保存したいと思います。

そして、次のような関係フィルターをユーザーモデルに含めたいと思います。

has_many :games, :through => 'game_users'   
has_many :liked_games, :through => 'game_users', :conditions_join => { :like => true }

この機能を持つためのきれいな方法はありますか?

23
Tiago

Jochenのリンクには良い解決策がありますが、:conditionsは非推奨であり、:conditions => ['event_users.active = ?',true]ビットはあまりRailsではないようです。これを試して:

has_many :game_users
has_many :game_likes, -> { where like: true }, class_name: 'GameUser'
has_many :liked_games, :through => :game_likes, class_name: 'Game', :source => :game
23
msanteler

Rails 4では次のことができます:

# app/models/user.rb

has_many :liked_games, -> { where(like: true) }, class_name: "Game", 
  through: :game_users, source: :game
11
littleforest