2015-10-29 2 views
1

J'ai un contrôleur dans lequel je dois accéder à la liste de mes rappels.Rails: sélectionnez ActiveSupport :: Callbacks sur les options

Je l'utiliser pour les filtrer:

_process_action_callbacks.select{|f| f.kind != :around} 

Je suis en train de les filtrer aussi sur les options (à savoir sur les tableaux « si » et « moins »).

J'ai essayé

_process_action_callbacks.select{|f| f.if.any? } 

mais il n'y a apparemment pas de méthode 'si'.

je déconcerté que j'ai ceci:

_process_action_callbacks.select{ 
    |f| f.kind != :around 
}.first 
=> #<ActiveSupport::Callbacks::Callback:0x007fd1a16295d8 
@chain_config= 
    {:scope=>[:kind], 
    :terminator=> 
    #<Proc:[email protected]/Users/name/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/actionpack-4.1.0/lib/abstract_controller/callbacks.rb:12 (lambda)>, 
    :skip_after_callbacks_if_terminated=>true}, 
@filter=:foo, 
@if=["action_name == 'create'"],  # 'if' seems present 
... 

et aussi ceci:

_process_action_callbacks.select{|f| f.kind != :around}.first.instance_variables 
=> [:@chain_config, :@name, :@kind, :@filter, :@key, :@if, :@unless] 

Y at-il un moyen d'obtenir les options ou le « si » du rappel?

Répondre

1

Oui, il n'y a pas accessor ou reader méthode pour @if, vérifié here. Mais vous pouvez toujours l'obtenir en utilisant la méthode instance_variable_get.

_process_action_callbacks.select do |f| 
    f.instance_variable_get(:@if).any? 
end