ActiveRecord STI: How can I break out of the parent class' default scope
On Rails 3.1 RC6, given
class Animal < ActiveRecord::Base
default_scope where(legs: 4)
end
The following does not work as expected:
class Man < Animal
default_scope unscoped.where(legs: 2)
end
The resulting SQL statement looks like this:
SELECT * FROM animals WHERE legs = 4 AND legs = 2
How can I override the parent class' default scope entirely?
I've also tried the followi开发者_StackOverflow中文版ngs none of which work:
default_scope{ unscoped.where legs: 2 }
default_scope with_exclusive_scope{ legs: 2 }
I dug into Rails' source code and came up with a solution that works under Rails 3.1 (tested with 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
I'd found this and it helped me http://m.onkey.org/default-scopes-and-inheritance-to-the-rescue
精彩评论