2011-08-30 72 views
10

On Rails的3.1 RC6,给予ActiveRecord的STI:我怎样才能摆脱父类的默认范围

class Animal < ActiveRecord::Base 
    default_scope where(legs: 4) 
end 

下不能按预期工作:

class Man < Animal 
    default_scope unscoped.where(legs: 2) 
end 

产生的SQL语句看起来像这样:

SELECT * FROM animals WHERE legs = 4 AND legs = 2 

我怎样才能完全重写父类的默认范围?

我也试过以下其中没有工作:

default_scope{ unscoped.where legs: 2 } 
default_scope with_exclusive_scope{ legs: 2 } 

回答

8

我挖到Rails的源代码,并与下的Rails 3.1有效的解决方案提出了(测试用ActiveRecord 3.1.0.rc6 ):

class Animal < ActiveRecord::Base 
    default_scope where(legs: 4) 
end 

class Man < Animal 
    self.default_scopes = [] 
    default_scope where(legs: 2) 
end 
+0

看来,这部作品在Rails的3.0:self.default_scoping = [] – jemminger

相关问题