Ruby on Rails:测试ActiveRecord的方法在没有命中数据库的条件下?

时间:2011-03-16 11:28:36

标签: sql ruby-on-rails activerecord

我正在使用Ruby on Rails 2.3.8。我有几个用户模型对象存储在内存和几个Where条件,我想检查这些。因为所有这些数据都存储在内存中,所以我希望避免命中数据库来执行这些检查。有没有办法检查这些模型而不需要访问数据库,即某种方法来验证针对内存模型对象的SQL Where条件?

为了使事情更清楚,如果我真的从数据库中提取记录,我会做这样的事情:

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

我在内存中有几个用户和几个whereConditions,我真正喜欢的是这样的:

someUser.meetsCondition?(whereCondition)

哪个会返回一个布尔值。有没有办法在不编写自己的SQL解析器的情况下执行此操作?

感谢。

4 个答案:

答案 0 :(得分:1)

如果用户已经在内存中,那么执行类似下面的操作应该不会重新加载对象吗?

user.name =~ /James Smith/

答案 1 :(得分:0)

Rails具有您可以在Rails指南网站上阅读的缓存设置。其中一些可能适合你想要完成的任务。

您也可以与Memcached gem一起查看cached_model。我通常使用它并在after_save模型回调中更新对象的缓存副本。

答案 2 :(得分:0)

不,没有内置机制来针对内存中的集合执行SQL逻辑。您必须编写自己的SQL解析器来执行您想要的操作。

答案 3 :(得分:0)

如果不自己解析,就无法做到这一点。

但是,如果您愿意,可以创建一个sqlite内存数据库并将记录加载到其中,然后您可以使用您的查询。我不知道这会有多实用 - 在正常的Web请求上做的工作肯定太多了,而且这样做的成本很可能比仅仅再次对真实数据库运行查询更昂贵。你必须进行实验。