2011-03-16 45 views
0

我正在使用Ruby on Rails 2.3.8。我有幾個用戶模型對象存儲在內存和幾個條件,我想檢查這些。因爲所有這些數據都存儲在內存中,所以我想避免觸擊數據庫來執行這些檢查。有沒有辦法在不碰到數據庫的情況下檢查這些模型,即某種方式來驗證針對內存模型對象的SQL Where條件?Ruby on Rails:測試ActiveRecord的方式在沒有擊中數據庫的情況下?

爲了讓事情更加清楚,如果我實際上是從數據庫中提取的記錄,我會做這樣的事情:

whereCondition = "name LIKE 'James Smith'" 
User.find(:first, :conditions => [whereCondition]) 

我在記憶幾個可用的用戶和幾個whereConditions,什麼我」 d真的很喜歡這樣的事情:

someUser.meetsCondition?(whereCondition) 

這將返回一個布爾值。有沒有這樣做,而不寫我自己的SQL解析器?

謝謝。

回答

0

有沒有辦法做到這一點無需自己進行解析。

不過,如果你願意,你可以創建一個SQLite內存數據庫並加載到記錄,然後你可以使用您的查詢。我不知道這是多麼實際 - 在一般的Web請求中完成工作肯定太多了,而且這樣做的代價可能會比再次對您的真實數據庫運行查詢花費更多。你必須嘗試。

1

如果用戶已經在內存中,然後做一些像下面應該不會重新加載對象應該呢?

user.name =~ /James Smith/ 
+0

一些那裏的條件不僅僅是檢查平等,所以替代還真是寫一個SQL解析器,我寧願不做多了幾分異國情調。 – Vega 2011-03-16 17:16:37

0

Rails有緩存設置,您可以在導軌指南網站了解。其中一些可能適合您要完成的任務。

您可能還需要與cached_model寶石一起看看Memcached。我通常使用這個,並在after_save模型回調中更新對象的緩存副本。

0

沒有,沒有內置的機制來對內存中集合執行SQL邏輯。你將不得不編寫你自己的SQL解析器來做你想做的事情。

相關問題