Rails 3使用它的默认范围加入相关模型

时间:2011-08-10 13:29:26

标签: ruby-on-rails activerecord arel

我正在尝试使用以下设置查询模型

Class Scorecard < AR::Base
  default_scope where(:archived => false)
  belongs_to :user
  has_many :scorecard_metrics
end

Class ScorecardMetric < AR::Base
  belongs_to :scorecard
end

Class User < AR::Base
  has_many :scorecards
end

我正在尝试使用加入记分卡的命名范围从记分卡指标查询,我希望它包含记分卡的默认范围,我当前的实现(有效)看起来像这样

# on ScorecardMetric
scope :for_user, lambda { 
  |user| joins(:scorecard).
         where("scorecards.user_id = ? and scorecards.archived = ?", user.id, false) 
}

这对我来说似乎很麻烦,有没有办法加入并包含加入关联的默认范围?

1 个答案:

答案 0 :(得分:4)

看起来我找到了我要找的答案,我刚刚做了这个

scope :for_user, lambda { |user| joins(:scorecard).where('scorecards.user_id = ?', user.id) & Scorecard.scoped }

没有重复的逻辑就更好了