我想进行联接查询,但前提是满足条件。
在以前版本的 Rails 中,当使用 find 时,我可以使用:
options = { :order=> 'courses.name asc',
:include => [:units],
:group => 'courses.name',
:conditions => conditions }
options[:join] = :course_sub_responsibles if YOUR CONDITION GOES HERE
@courses = Course.find(:all, options)
Run Code Online (Sandbox Code Playgroud)
但在当前版本中,我该怎么做呢?
请参阅此处: Rails - 仅当条件为真时才使用 join
但第二个答案对我不起作用,因为我无法逐段构建查询。这样做会导致第一个查询获取大量数据。
我相信你可以做这样的事情:
query = Course.where(<your conditions>).order(<your order>)
query = query.joins(<your joins>) if YOUR CONDITION GOES HERE
@courses = query
Run Code Online (Sandbox Code Playgroud)
Rails 不会查询数据库,直到您使用类似 to_a /each /pluck 之类的东西。
要在控制台中测试这一点,您可以执行类似的操作(借用 @3limin4t0r 的评论):
foo = Course.all; nil
Run Code Online (Sandbox Code Playgroud)
此时不应运行任何 SQL。如果您随后foo在控制台上执行此操作,您将看到它运行查询 - 控制台将打印出结果,这将触发 Rails 获取其数据。
| 归档时间: |
|
| 查看次数: |
553 次 |
| 最近记录: |