2010-08-31 39 views
2

我有一个模型,它有一个名为deleted的字段,用于标记这些已删除的项目。Rails型号的默认条件

所以通常我只想查询那些有deleted = false项目,并在一些特殊情况下列出这些已删除的项目进行恢复。

有没有可能这样做?我现在可以做的只是使用具有:conditions => {:deleted => false}

的命名示波器有没有更好的方法来做到这一点,当我做Item.other_named_scope,我可以找到所有那些未删除的项目?

回答

3

您可以使用default_scope。现在

class Post 
    default_scope :conditions => {:deleted => false} 
end 

所有查询到Post模型将在ACTIVE职位。当你想覆盖此行为使用with_exclusive_scope

Post.with_exclusive_scope{ find_all_by_deleted(true) } #returns deleted records 

参考:

Link 1

买者

的default_scope影响到每一个取景器调用。它应该小心使用并充分意识到不需要的副作用。

+0

尽管存在这样的警告,我仍然建议避免使用默认范围的条件,并将其用于'order by'。很可能其他人(或未来的你)会忘记查询限制部分,并且会因为它而抓住幻影缺陷一段时间而挠头。我的2美分经验:) – 2013-04-17 14:20:56

+0

@MichaelDurrant,由于您陈述的原因,我在大多数情况下避免了默认范围。话虽如此,无论何时我必须打电话选择排除“已删除”记录的方法,我都会重新审视这个问题。有几次我暂时选择了默认范围方法。 – 2013-04-17 17:07:02