我正在使用Ruby on Rails 2.3.8。我有几个用户模型对象存储在内存和几个Where条件,我想检查这些。因为所有这些数据都存储在内存中,所以我希望避免命中数据库来执行这些检查。有没有办法检查这些模型而不需要访问数据库,即某种方法来验证针对内存模型对象的SQL Where条件?
为了使事情更清楚,如果我真的从数据库中提取记录,我会做这样的事情:
whereCondition = "name LIKE 'James Smith'"
User.find(:first, :conditions => [whereCondition])
我在内存中有几个用户和几个whereConditions,我真正喜欢的是这样的:
someUser.meetsCondition?(whereCondition)
哪个会返回一个布尔值。有没有办法在不编写自己的SQL解析器的情况下执行此操作?
感谢。
答案 0 :(得分:1)
如果用户已经在内存中,那么执行类似下面的操作应该不会重新加载对象吗?
user.name =~ /James Smith/
答案 1 :(得分:0)
Rails具有您可以在Rails指南网站上阅读的缓存设置。其中一些可能适合你想要完成的任务。
您也可以与Memcached gem一起查看cached_model。我通常使用它并在after_save
模型回调中更新对象的缓存副本。
答案 2 :(得分:0)
不,没有内置机制来针对内存中的集合执行SQL逻辑。您必须编写自己的SQL解析器来执行您想要的操作。
答案 3 :(得分:0)
如果不自己解析,就无法做到这一点。
但是,如果您愿意,可以创建一个sqlite内存数据库并将记录加载到其中,然后您可以使用您的查询。我不知道这会有多实用 - 在正常的Web请求上做的工作肯定太多了,而且这样做的成本很可能比仅仅再次对真实数据库运行查询更昂贵。你必须进行实验。