jay*_*del 24 activerecord ruby-on-rails ruby-on-rails-3
我正在尝试组合一系列可以使用ActiveRecord动态创建和执行复杂查询的类.我对整个做法感到非常满意:
MyModel.select("id, name, floober").join(:creator).where(:is_active => true)
Run Code Online (Sandbox Code Playgroud)
我正在努力的是使用这些东西建立一个查询,无法提前确定每种可能的方法(连接数,数量或where子句,限制,组等)的数量.我可能有2个连接,或者没有连接,具体取决于它的调用位置.
由于我如何得到这些东西的性质 - 连接列表,列列表,where子句列表等 - 我可以盲目地将它们链接在一起.我必须将列连接在一起,排列连接,链接where子句,所以我无法遍历各种列表.
我试图避免编写任何原始SQL.
我试过的一件事是将ruby语句作为一个字符串构建,然后在最后评估它,当我完成后,我感到很脏,就像我需要洗澡一样.我正在寻找的是一种缓存查询状态的方法,直到所有部分都已累积,然后执行它们.
我是否"走出Rails"?
提前致谢...
jay*_*del 56
我想我明白了.基于我对AR查询方法的理解,我完全不合适.事实证明,在您实际尝试使用结果之前,ActiveRecord实际上并不执行查询.因此,可以执行以下操作:
model_query = MyModel.select("column12, column32")
model_query = model_query.joins(:user)
model_query = model_query.where(:column12 => true)
Run Code Online (Sandbox Code Playgroud)
一切都建成后你就可以做到
model_query.each do |record|
...
end
Run Code Online (Sandbox Code Playgroud)
在您调用每个(或您使用的任何需要查询结果的方法)之前,查询实际上不会执行.
我通过观看Railscasts 202和215得到了这个.我喜欢Ryan Bates.
归档时间: |
|
查看次数: |
13656 次 |
最近记录: |