rails has_many: through - возможно ли наличие условий в сквозной таблице? - PullRequest
22 голосов
/ 07 ноября 2010

Есть 2 модели, и они связаны с использованием отношения has_many: while.

Существует параметр: condition, который будет искать условие в другой таблице модели, но есть ли способ создать условие в таблице соединения?

Например, supose у меня есть:

User
Game
GameUser

У одного пользователя может быть много игр, так как в игре может быть много пользователей. Но я хочу сохранить дополнительную информацию в объединенной таблице, например, нравится эта игра пользователю или нет.

И я хотел бы иметь фильтр отношений в моей модели User, что-то вроде этого:

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

Есть ли симпатичный способ использовать эту функцию?

Ответы [ 2 ]

23 голосов
/ 19 ноября 2013

Ссылка Йохена имеет хорошее решение - но :conditions устарела, и бит :conditions => ['event_users.active = ?',true] не кажется очень рельсовым.Попробуйте это:

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
10 голосов
/ 30 января 2016

В Rails 4 вы можете сделать:

# app/models/user.rb

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