活动记录以多个步骤创建查询

时间:2013-09-20 23:18:19

标签: ruby-on-rails

我对活动记录感到有点困惑,它似乎只是在您停止时触发查询,即。

@model.where( :store_id => @sid )

哪个好,但是如果我想构建这样的查询怎么办:

query = @model.where( :store_id => @sid )

if(some_condition)
  query.offset(50)

然后执行查询(实际上并不是我在做什么,只是一个非常简单的例子)。有没有办法将查询分步处理,然后告诉它执行?

2 个答案:

答案 0 :(得分:3)

实际上,ActiveRecord会完全按照你的意愿行事。它被称为延迟加载。您可能会对rails控制台感到困惑,该控制台在该行的结果后面调用.inspect

查看此问题:Lazy loading in Rails 3.2.6

答案 1 :(得分:2)

这已经像你想要的那样工作。

where()会返回ActiveRecord::Relation的实例。

在需要之前,关系不会执行它的数据库调用。您可能遇到的原因是您正在控制台中测试它,它会打印每个语句的输出(从而加载关系)。您可以通过loaded()方法测试是否已加载关系。

在控制台上试试这个:

m = @model.where(:store_id => @sid); # the semicolon will silence the output

m.loaded?  # nil
m          # executes db call, will print out the contents of the relation
m.loaded?  # true