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 }
Есть ли хороший способ иметь эту функциональность?
Ответы
Ответ 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