rails是否对以下两种用法之一对执行过滤器之前的顺序做出任何保证:
before_filter [:fn1, :fn2]
要么
before_filter :fn1
before_filter :fn2
我将不胜感激。
Answers:
如果您参考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.
因此,您可以像这样明确给出过滤器链的顺序。
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
fn1 ? fn2 : false
据我所知,您放置了要执行的第一个函数,依此类推。
因此,类似:
before_filter :fn1, :fn2
def fn1
puts 'foo'
end
def fn2
puts 'bar'
end
fn1
然后执行fn2
。
希望能有所帮助。
:fn1, :fn2
,:fn2也会被首先调用。