rails是否对使用以下任一用法执行过滤器之前的顺序做出任何保证:
before_filter [:fn1, :fn2]
或
before_filter :fn1
before_filter :fn2
我很感激任何帮助。
答案 0 :(得分:80)
如果您引用http://api.rubyonrails.org/v2.3.8/classes/ActionController/Filters/ClassMethods.html,则会有一个名为“过滤器链排序”的子标题,以下是示例代码:
class ShoppingController < ActionController::Base
before_filter :verify_open_shop
class CheckoutController < ShoppingController
prepend_before_filter :ensure_items_in_cart, :ensure_items_in_stock
根据解释:
现在是
CheckoutController
的过滤器链:ensure_items_in_cart
,:ensure_items_in_stock
,:verify_open_shop.
因此,您可以明确地给出过滤器链的顺序。
答案 1 :(得分:24)
在Rails中的Before_filter顺序 http://b2.broom9.com/?p=806
过滤链排序 http://rails.rubyonrails.org/classes/ActionController/Filters/ClassMethods.html
如果您需要担保订单,可以这样做:
before_filter :fn3
def fn3
fn1
fn2
end
答案 2 :(得分:2)
据我所知,你把你想要执行的第一个函数等等。
所以,比如:
before_filter :fn1, :fn2
def fn1
puts 'foo'
end
def fn2
puts 'bar'
end
执行fn1
,然后执行fn2
。
希望有所帮助。
答案 3 :(得分:1)
CheckoutController
的过滤器链不遵循此顺序
:ensure_items_in_cart, :ensure_items_in_stock, :verify_open_shop
相反,它应该是
:ensure_items_in_stock, :ensure_items_in_cart, :verify_open_shop