Rails:通过变量指定查询范围?

时间:2013-09-22 08:20:36

标签: ruby-on-rails metaprogramming

有没有办法通过变量向ActiveRecord查询添加范围?

if @date.present?
  result << Foo.in_region(params[:region_id]).created_since(@date)
  result << Bar.in_region(params[:region_id]).created_since(@date)
  result << Baz.in_region(params[:region_id]).created_since(@date)
else
  result << Foo.in_region(params[:region_id])
  result << Bar.in_region(params[:region_id])
  result << Baz.in_region(params[:region_id])
end

我想做的事情如下:

scope = in_region(params[:region_id])
scope << created_since(@date) if @date.present?
%w(Foo Bar Baz).each do |model|
  result << model.scope
end

当然不是这样的。

1 个答案:

答案 0 :(得分:0)

您需要创建两个范围,然后将它们链接起来。 但对于这样简单的查询,我没有看到范围的原因,它只是

Foo.where(region_id: params[:region_id]).where('created_at >= ?', @date)

因此您无需添加范围。如果您仍坚持使用范围,可以查看concerns