2012-02-25 32 views
2

最近我一直在使用ModelName.where(nil)在某些情況下,我可能會使用ModelName.allRails ActiveRecord替代ModelName.all

兩者之間的區別在於前者返回ActiveRecord關係,而後者返回數組。我可以從前者鏈接查詢,但不是後者。雖然我失去了ModelName.all的自我記錄性質,但我並不高興。

是否有像ModelName.all這樣的方法返回AR關係並維護自我記錄?

+1

在其中(無)是一個非常好的解決方法總是返回一個關係。也許在你不確定你是否會返回關係或類的情況下 - 你可以在ActiveRecord :: Base上添加一個類方法,例如def self.prepare;其中(無);結束。 – 2012-02-25 19:29:56

回答

1

ModelName.scoped將爲您提供與默認範圍的AR關係,ModelName.unscoped將給出沒有默認範圍的AR關係。

+1

我不知道這些。知道絕對有用。我不確定我是否會使用這一個,因爲[此回覆](http://stackoverflow.com/a/4166950/640517)提到'unscoped'對於關聯使用可能是危險的。即在我目前的項目中:'User.first.posts#=> []',但'User.first.posts.unscoped#=>所有帖子,由任何用戶。 – 2012-02-27 04:06:28

1

在這種情況下,您可以使用ModelName,因爲您不能使用all bcz它返回數組。

E.g.

a = ModelName 
a = a.active # here active is scope 
a = a.where(:deleted => false) 
a = a.all 
+0

我不認爲我可以單獨列舉'ModelName':ModelName.each {| obj | ...}#沒有爲ModelName定義的每個方法。與'ModelName.where(nil).each {...}'和'ModelName.all.each {...}'相比,兩者都可以工作,以免我不需要更深入地研究。 – 2012-02-27 03:44:02

-1

嗯,我通常使用

Model.find(:all, :conditions=>whatever, :order=>whatever,:limit=>whatever) 

在你的情況也許Model.find(:所有)會做的伎倆爲您

+0

'Model.find(:all)'返回一個數組。你不能鏈接到它。對'Model'上定義的'classMethod'嘗試'Model.find(:all).classMethod'。 – 2012-02-27 03:47:47

+0

我總是記得得到一組活動記錄對象,我認爲這是需要的。我對這個問題的誤解。謝謝你告訴我:) – phoenixwizard 2012-02-27 12:02:06