范围链接与可选参数

时间:2014-07-22 09:16:03

标签: ruby-on-rails ruby-on-rails-3 scope

目前我有以下类型的代码

scope :scope1, lambda{|param| where(param1: params)}
scope :scope2, lambda{|param| where(param2: params)}

在控制器中我会做

results = Model.some_other_scope

if !params[:param1].blank?
 results = results.scope1(params[:param1])
end

if !params[:param2].blank?
 results = results.scope2(params[:param2])
end

这不是很有效,因为它会对DB进行多次调用而不是一次。

有没有办法将这些范围链接起来,如果参数不存在就会被禁用?

results = Model.scope1(params[:param1]).scope2(params[:param2])

目前,链接不起作用因为where子句没有返回任何东西然后整个链断裂

1 个答案:

答案 0 :(得分:2)

实际上,ActiveRecord查询是懒惰地评估的,因此,简单地说,此代码只生成一个数据库调用。所以你的问题并不存在。