У меня есть следующие модели:
school.rb
class School < ActiveRecord::Base
has_many :offers
has_many :players, :through => :offers
has_many :teammembers, :class_name => 'Offer', :conditions => ["on_roster = \'t\'"]
has_many :teamplayers, :through => :teammembers, :source => :player
player.rb
class Player < ActiveRecord::Base
has_many :offers, :dependent => :destroy
scope :sr, lambda {
where("(players.year = ? and players.redshirt = 't') or (players.year = ? and players.redshirt = 'f')", (Time.now + 8.months - 5.years).year, (Time.now + 8.months - 4.years).year)
}
offer.rb
class Offer < ActiveRecord::Base
belongs_to :school
belongs_to :player
validates_uniqueness_of :school_id, :scope => [:player_id]
Тогда в моем school_controller у меня есть
schools_controller.rb
def show
@school = School.find(params[:id], :include => [{:offers => :player}])
@seniors = @school.teamplayers.sr
Моя проблема в том, что мне нужно отобразить поле из модели предложений, которое связано с отношениями между Школой и Игроком. В настоящее время я выполняю дополнительный запрос в представлении, чтобы получить это поле.
школы / show.haml.html
- @srpg.each do |player|
= Offer.find_by_school_id_and_player_id(@school.id, player.id).status
Очевидно, что это вызывает проблему N + 1, но я не могу найти способ вернуть оба файла offer.status и player. * В одну и ту же запись.