有什麼更好的方法將參數傳遞給Rails控制器中的過濾器?將參數傳遞給過濾器 - 最佳實踐
編輯:根據傳遞給它的參數或取決於執行其操作的參數,過濾器具有不同的行爲。 我在我的應用程序中有一個示例,其中一個篩選器確定數據如何排序。此過濾器具有klass參數,並調用klass.set_filter(param [:order])來確定:搜索中的順序。
有什麼更好的方法將參數傳遞給Rails控制器中的過濾器?將參數傳遞給過濾器 - 最佳實踐
編輯:根據傳遞給它的參數或取決於執行其操作的參數,過濾器具有不同的行爲。 我在我的應用程序中有一個示例,其中一個篩選器確定數據如何排序。此過濾器具有klass參數,並調用klass.set_filter(param [:order])來確定:搜索中的順序。
你必須爲此使用特效。傳遞參數
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
編輯
還有一個方法是重寫的ActionController::Filters::BeforeFilter
的call
方法。
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
現在你可以按照如下
class FooController < ApplicationController
# calls the generic_filter with param1= "foo"
before_filter :generic_filter, :para => "foo", :only => :new
# calls the generic_filter with param1= "foo" and param2="tan"
before_filter :generic_filter, :para => ["foo", "tan"], , :only => :edit
private
def generic_filter para1, para2="bar"
end
end
I -think-您正在尋找使用連續的named_scope過濾器,但我不確定。我們需要更多信息,如果這不是你需要的。
不,問題不在於模型或範圍的車型改變你的before_filter規範。 – nanda 2010-02-24 18:28:18
我知道。我只是想知道是否有其他人(和更好的語義)方式來做到這一點。 – nanda 2010-02-24 22:33:23
我編輯了答案來添加另一個場景。看一看。 – 2010-02-25 01:57:28
謝謝kandada,這看起來好多了= D – nanda 2010-02-25 11:39:25