我对活动记录感到有点困惑,它似乎只是在您停止时触发查询,即。
@model.where( :store_id => @sid )
哪个好,但是如果我想构建这样的查询怎么办:
query = @model.where( :store_id => @sid )
if(some_condition)
query.offset(50)
然后执行查询(实际上并不是我在做什么,只是一个非常简单的例子)。有没有办法将查询分步处理,然后告诉它执行?
答案 0 :(得分:3)
实际上,ActiveRecord会完全按照你的意愿行事。它被称为延迟加载。您可能会对rails控制台感到困惑,该控制台在该行的结果后面调用.inspect
。
答案 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