2010-08-31 75 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