Rails模型的默认条件

我有一个模型,其中有一个名为deleted的字段,用于标记那些已删除的项目。

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

有可能吗? 我现在能做的就是使用命名范围:conditions => {:deleted => false}

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

您可以使用default_scope。

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

现在,对Post模型的所有查询都将在ACTIVEpost上。 如果要覆盖此行为,请使用with_exclusive_scope

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

参考:

链接1

警告

default_scope影响每个finder调用。 应谨慎使用,并充分了解不必要的副作用。