使用另一个范围中相关模型的范围

时间:2012-02-19 00:50:15

标签: ruby-on-rails activerecord

我有两个相关的模型,如:

class PartCategory < ActiveRecord::Base 
  has_many :part_types 
  scope :engine, where(:name => 'Engine') 
end 

class PartType < ActiveRecord::Base 
  belongs_to :part_category 
end 

我想在PartType模型中添加一个范围,例如:

scope :engine_parts, lambda { joins(:part_category).engine } 

但是当我尝试时,我收到以下错误:

NoMethodError:未定义的方法`default_scoped?' for ActiveRecord :: Base:Class

我没有很多关于范围的经验,所以我可能在这里缺少一些基本的东西。有人可以告诉我它是什么。

1 个答案:

答案 0 :(得分:46)

试试这个:

scope :engine_parts, lambda { joins(:part_category).merge(PartCategory.engine) } 

基本上,joins(:part_category)的结果是两个模型的连接,因此您无法直接在其上调用.engine,您需要以这种方式组合范围。

请参阅Here for more