将参数传递给过滤器 - 最佳实践

时间:2010-02-24 16:35:02

标签: ruby-on-rails argument-passing filter

有什么更好的方法可以将参数传递给Rails控制器中的过滤器?

编辑:根据传递给它的参数,过滤器具有不同的行为,或者取决于执行其操作的参数。 我的应用程序中有一个示例,其中过滤器确定数据的排序方式。此过滤器有一个klass参数,并调用klass.set_filter(param [:order])来确定:搜索中的顺序。

2 个答案:

答案 0 :(得分:3)

你必须为此使用过程。

class FooController < ApplicationController
  before_filter { |controller|  controller.send(:generic_filter, "XYZ") }, 
                :only => :edit
  before_filter { |controller|  controller.send(:generic_filter, "ABC") },
                :only => :new

private
  def generic_filter type
  end
end

修改

传递参数的另一种方法是覆盖call的{​​{1}}方法。

ActionController::Filters::BeforeFilter

现在您可以按如下方式更改before_filter规范

class ActionController::Filters::BeforeFilter
  def call(controller, &block)
    super controller, *(options[:para] || []), block
    if controller.__send__(:performed?)
      controller.__send__(:halt_filter_chain, method, :rendered_or_redirected)
    end
  end
end

答案 1 :(得分:0)

我想 - 你正在寻找使用连续的named_scope过滤器,但我不确定。如果那不是您需要的,我们需要更多信息。