Rails:将两个查询合并为一个

Par*_*ngh 0 ruby ruby-on-rails rails-models

我是铁杆新手.以下代码以Foo作为模型对象:

a = Foo
a = Foo.where(age: 18)
if params[:sort] == "desc"
  a = a.order("name desc") 
end
Run Code Online (Sandbox Code Playgroud)

这里执行了两个查询,我想将它们组合成一个,或者你可以说我想要执行 Foo.where(age=18).order("name asc")

请记住,当不需要订单时可能存在这种情况,即params [:sort]不等于desc.

请不要给出解决方案

if params[:sort] == "desc"
    a = a.where(age=18).order("name desc") 
else
    a = a.where(age=18)
end
Run Code Online (Sandbox Code Playgroud)

因为它使代码冗余,并且对于更多参数,它可能不起作用.

Ser*_*sev 5

不,你错了.实际上,这里不执行任何查询.

a = Foo
a = Foo.where(age=18)
if params[:sort] == "desc"
  a = a.order("name desc") 
end
Run Code Online (Sandbox Code Playgroud)

在您开始检索数据的位置发送实际查询.也就是说,做点什么

a.each do |b|
  # do something with b
end
Run Code Online (Sandbox Code Playgroud)

在那之前,你可以放心地连锁标准的建筑方法(where,order,select等).