2015-08-18 49 views
0

我希望能够在部分中构建查询,而不需要在Ruby on Rails中稍后再评估最终语句。有没有办法推迟ActiveRecord查询(如Django中的QuerySet)?

具体地说这种行为(从Djano文档复制):

一个QuerySet可以被构造,过滤,切片,并 通常通过周围而不实际命中数据库。没有 数据库活动实际上发生,直到您做一些事情来评估 queryset。

回答

2

这是默认情况下的工作方式,除非您访问结果。也就是说,你可以把这个到你的控制器:

@widgets = Widget.enabled 
@widgets = @widgets.where(foo: 'bar') 
# ... more conditions here if you want ... 

,然后在视图中把这个:

<%- @widgets.each do |w| %> 
    ... 
<% end %> 

的DB查询将不会运行,直到@widgets.each线。

您可以在控件中使用logger.info语句来测试该查询,以查看实际执行查询的位置。

+0

你说得对。我从来没有意识到这一点,因为控制台不这样工作。 – Bowen

相关问题