【发布时间】:2012-01-03 23:41:25
【问题描述】:
我有以下型号:
学校.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
播放器.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]
然后在我的学校控制器中
schools_controller.rb
def show
@school = School.find(params[:id], :include => [{:offers => :player}])
@seniors = @school.teamplayers.sr
我的问题是我需要显示 offer 模型中与 School 和 Player 之间的关系相关联的字段。目前,我正在视图中执行附加查询以获取此字段。
学校/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.* 都带回同一记录中。
【问题讨论】:
标签: ruby-on-rails-3 include has-many-through named-scope