[code:ruby]class Game < ActiveRecord::Base
has_many :players
end
class Player < ActiveRecord::Base
belongs_to :game
belongs_to :user
end
class User < ActiveRecord::Base
has_many :players
has_many :games, :through => :players
end[/code]
Jak wydobyć rekordy wszystkich gier z zaznaczeniem tych, w których dany użytkownik gra jako gracz?
W czystym SQL napisałbym coś takiego:
select ...
from games
left join (select * from players where user_id = ?) players
on (players.game_id = games.id)
Da się to jakoś ładnie w ruby zapisać?
[quote=apohllo]participated = current_user.games.to_a
rest = Game.all.to_a - participated
Ale to może być nieefektywne. Zależy ile masz tych gier.[/quote]
może lepiej to odejmowanie zrobić jednak po stronie bazy?
user_games = current_user.games.select(:id).map(&:id)
games = Game.where(["id NOT IN (?)", user_games])
ewentualnie z użyciem gemu squeel (nowa wersja meta_where)