Apr 24
ActiveScaffoldExt之三:过滤列表
简介
在企业应用中常常有这样的要求,比如,同样一个业务列表,核价员要看到待审核状态和重新提交状态的,生产调度员要看到生产状态和采购状态的…业务员要看到所有状态的。他们都需要对业务列表进行过滤。过滤有时候是基于一个字段,比如业务状态,也可能会基于两个字段,比如业务状态和核准与否。这就是这个扩展要解决的问题。
市面上还有一个叫做activescaffoldlistfilters的插件可以参考,这是一个更通用的插件,把belongs_to关联中的所有可能性列出,给用户复选。
安装
请参考批量创建的安装。
用法
你可以为一个状态指定一个过滤选项,像这样:
config.list.add_filter "preparing", :status => "preparing"
你还可以把几个状态值放在一个过滤选项里,就像这样:
config.list.add_filter "processing", :status => ["placed", "processing"]
一个过滤选项的条件也可以是几个字段,就像这样:
config.list.add_filter "finished", :status => "processed", :verified => true
label选项给你用来指定显示的文本,如果不指定的话,它就会用这个过滤选项的name来做文本,一般中文项目都是需要指定一下的,就像这样:
config.list.add_filter "preparing", :label => "刚下单", :status => "preparing"
如果你需要给这些选项加上条件,比如哪些人可以看到什么,可以给list动作加一个before_filter,就像这样:
class OrdersController < ApplicationController
before_filter :add_filter_options, :only => :index
def add_filter_options
active_scaffold_config.list.add_filter “preparing”, :status => “preparing”
active_scaffold_config.list.add_filter “processing”, :status => [”placed”, “processing”]
if current_user.has_role?(’moderator’)
active_scaffold_config.list.add_filter “finished”, :status => “processed”, :verified => true
end
end
end
注:这往往需要和security功能配合使用。
这里面还有一个彩蛋功能──可以让浏览器记住你上次过滤的选项,自己来找找看吧。
Demo
这里是一个Demo,如果你已经svn update了最新的l10n_scaffold插件,会发现这个新功能的汉化也在其中了。
