Apr 30
ActiveScaffoldExt之四:高级搜索
简介
按字段搜索是ActiveScaffold的一个隐藏功能。虽然文档没有涉及(我们会在下面具体介绍用法),但是相信细心的用户已经发现了。ActiveScaffold缺省的搜索很有web应用程序风格,但是企业应用的话,按字段搜索更加普遍。它甚至还可以用来生成报表,对不对?这是我们当时选择ActiveScaffold的原因之一。
然而ActiveScaffold的按字段搜索做的不太地道,所有的字段都是文本输入框,而我希望看到像创建编辑界面那样丰富的表单项。通过这个扩展,你就可以做到:
- 对于定义了form_ui=:select的字段,搜索表单项也是个下拉列表框。
- 数字字段有了运算符,除了缺省的等于,还有>, >=, <, <=, !=,甚至还可以按范围搜索
- 除了众望所归的日期范围(自定义),还有一些预设的区间,比如:今年,本季度,上个月等等。另外,为了配合报表图表功能,还有一个“趋势”区间,可以设定为“最近5周以来”这样的范围。
安装
请参考批量创建的安装。
用法
激活ActiveScaffold中的field_search功能:
config.actions.swap :search, :field_search
然后定义需要搜索的字段:
config.field_search.columns = :brand, :size, :created_at
假设你已经定义了某个belongs_to字段的form_ui为:select:
config.columns[:brand].form_ui = :select
并且日期字段的form_ui也必须是:calendar_date_select(需要安装calendar_date_select插件):
config.columns[:created_at].form_ui = :calendar_date_select
这样就搞定了。
Demo
还是用上次批量创建的运动鞋的模型,为了演示日期范围搜索,我们加上了created_at字段。点那个搜索按钮,你就能看到惊艳的高级搜索界面了。
如果你已经svn update了最新的l10n_scaffold插件,会发现这个新功能的汉化也在其中了。

05月 10th, 2008 at 12:00 am
两点补充:
1、对于select类型的字段,还需要设置一下这个字段的search_sql:
config.columns[:brand].search_sql = ‘brands.id’
2、如果自定义日期搜索范围的起始/结束时间都不填,会报错。这个问题已经在新版本(svn:v37)中解决了。这两个框的缺省日期都会是:今天。
感谢乐道(www.rakudoor.com)的主人carlos在google code上提交的issue!