是否可以在返回子类的单个表继承上设置一个范围?
例如:
class Post < ActiveRecord::Base
scope :sticky, -> { where(type: 'StickyPost') }
end
class StickyPost < Post
end
现在,当我在一个帖子集合上调用sticky
时,我会得到一个StickyPost
示例集合。
但是当我调用posts.sticky.build
时,type
被设置为StickyPost
,但是类仍然是Post
。
posts.sticky.build
=> #<Post id: nil, message: nil, type: "StickyPost", created_at: nil, updated_at: nil>
- 更新**
很显然这很管用。
posts.sticky.build type: 'StickyPost'
=> #<StickyPost id: nil, message: nil, type: "StickyPost", created_at: nil, updated_at: nil>
这很奇怪,因为作用域已经设置了类型,这看起来有点多余。有什么方法可以在作用域中设置这种行为吗?
1条答案
按热度按时间bvjxkvbb1#
通过在作用域中使用
becomes
方法,可以使sticky
作用域返回正确的类:becomes
方法将一个类的示例Map到单表继承层次结构中的另一个类。在本例中,它将sticky
作用域返回的Post
的每个示例Map到StickyPost
。通过此更改,调用posts.sticky.build
现在将返回StickyPost
的示例: