Подтвердить что ты не робот

Rails has_many: through - Возможно ли иметь условия в сквозной таблице?

Существует 2 модели, и они связаны с использованием отношения has_many: хотя.

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

Например, предположим, что у меня есть:

User
Game
GameUser

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

И я хотел бы иметь фильтр отношений в моей модели User, примерно так:

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

Есть ли хороший способ иметь эту функциональность?

4b9b3361

Ответ 1

Jochen link имеет хорошее решение, но :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

Ответ 2

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

# app/models/user.rb

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