如何使用default_scope忽略基于布尔字段的条目

时间:2011-10-10 21:26:33

标签: ruby-on-rails ruby-on-rails-3 scope

简单的问题。目前,对于Post模型,这是我对默认范围的设置

default_scope :order => 'posts.created_at ASC'

我如何才能将其扩展为:draft => false

另外,如何让非默认范围返回:draft => true

谢谢!

1 个答案:

答案 0 :(得分:3)

在这种情况下,请勿使用default_scope。使用这些常规范围:

scope :drafts, where(:draft => true)
scope :published, where(:draft => false)

如果你真的想使用default_scope(我不建议这样做,因为它限制了你并让你以后必须绕过它),你可以这样做:

default_scope order('posts.created_at').where(:draft => false)

并稍后获得草稿:

@drafts = Post.unscoped.where(:draft => true)

但是,再次,如果你正在使用default_scope,这意味着你希望它始终使用这些条件,并且使用unscoped你基本上告诉ActiveRecord不要做你明确告诉的事情它来。对我来说,这是一个黑客攻击。