Rails donne-t-il des garanties quant à l'ordre avant l'exécution des filtres avec l'une des utilisations suivantes:
before_filter [:fn1, :fn2]
ou
before_filter :fn1
before_filter :fn2
J'apprécierais toute aide.
Si vous faites référence http://api.rubyonrails.org/v2.3.8/classes/ActionController/Filters/ClassMethods.html , il existe une sous-rubrique appelée "Filter chain ordering", voici l'exemple de code à partir de ce:
class ShoppingController < ActionController::Base
before_filter :verify_open_shop
class CheckoutController < ShoppingController
prepend_before_filter :ensure_items_in_cart, :ensure_items_in_stock
Selon l'explication:
La chaîne de filtres pour le
CheckoutController
est maintenant:ensure_items_in_cart
,:ensure_items_in_stock
,:verify_open_shop.
Vous pouvez donc explicitement donner l'ordre de la chaîne de filtrage comme ça.
Commande Before_filter en Rails http://b2.broom9.com/?p=806
Ordre des chaînes de filtres http://Rails.rubyonrails.org/classes/ActionController/Filters/ClassMethods.html
Si vous avez besoin d'un ordre de garantie, vous pouvez le faire:
before_filter :fn3
def fn3
fn1
fn2
end
pour autant que je sache, vous mettez la première fonction que vous voulez exécuter et ainsi de suite.
Donc, quelque chose comme:
before_filter :fn1, :fn2
def fn1
puts 'foo'
end
def fn2
puts 'bar'
end
Exécuterait fn1
, puis fn2
.
J'espère que cela pourra aider.
La chaîne de filtres pour le CheckoutController
ne suit pas cet ordre
:ensure_items_in_cart, :ensure_items_in_stock, :verify_open_shop
Au lieu de cela, il devrait être
:ensure_items_in_stock, :ensure_items_in_cart, :verify_open_shop