Ruby on rails 在Rails 3中分解复杂的搜索查询

Ruby on rails 在Rails 3中分解复杂的搜索查询,ruby-on-rails,search,activerecord,ruby-on-rails-3,Ruby On Rails,Search,Activerecord,Ruby On Rails 3,我有一个控制器,它有很多选项通过表单发送给它,我想知道如何最好地将它们分开,因为它们不是同时使用的。即有时没有标签,有时没有指定价格。对于价格,我有一个默认的价格设置,这样我就可以一直在那里工作,但是标签要么需要在那里,要么不需要。等等 @locations = Location.find(params[:id]) @location = @locations.places.active.where("cache_price BETWEEN ? AND ?",price_low,price_h

我有一个控制器,它有很多选项通过表单发送给它,我想知道如何最好地将它们分开,因为它们不是同时使用的。即有时没有标签,有时没有指定价格。对于价格,我有一个默认的价格设置,这样我就可以一直在那里工作,但是标签要么需要在那里,要么不需要。等等

@locations = Location.find(params[:id])

@location = @locations.places.active.where("cache_price BETWEEN ? AND ?",price_low,price_high).tagged_with([params[:tags]).order(params[:sort]).paginate :page => params[:page]

我还没有看到这方面的好例子,但我相信它一定经常发生。。。有什么建议吗?此外,即使是最后加上的will_paginate也应该是可选的,因为结果要么进入列表,要么进入谷歌地图,而且地图不需要分页。

重构复杂搜索操作时要做的第一件事是使用匿名范围

即:

如果动作控制器仍然太大,可以使用类来处理搜索。此外,通过使用Rails 3和ActiveModel中的类,如果您想

看看我的一个插件:它允许您轻松创建可在表单中使用的类


还可以看看另一个插件,它更擅长于使用模型的作用域创建搜索对象。

重构复杂的搜索操作时,首先要做的是使用匿名作用域

即:

如果动作控制器仍然太大,可以使用类来处理搜索。此外,通过使用Rails 3和ActiveModel中的类,如果您想

看看我的一个插件:它允许您轻松创建可在表单中使用的类


另外,请看一看另一个插件,它更擅长于使用模型的作用域创建搜索对象。

你所说的“不工作”是什么意思?你所说的“不工作”是什么意思?你能详细解释一下Fruit.scoped吗?这个作用域从何而来?@MikeBevz:我也很好奇。我发现:你能解释更多关于水果的事吗?范围-这个范围是从哪里来的?@MikeBevz:我也很好奇。我发现:
fruits = Fruit.scoped
fruits = fruits.where(:colour => 'red') if options[:red_only]
fruits = fruits.where(:size => 'big') if options[:big_only]
fruits = fruits.limit(10) if options[:only_first]
...