Rails:在选项上选择ActiveSupport :: Callbacks

时间:2015-10-29 16:21:52

标签: ruby-on-rails callback activesupport

我有一个控制器,我必须在其中访问我的回调列表。

我用它来过滤它们:

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

我也试图在选项上过滤它们(例如,在' if'以及除非'除非'数组)。

我试过这个

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

但显然没有'如果'方法

我感到困惑,因为我有这个:

_process_action_callbacks.select{
  |f| f.kind != :around
}.first
=> #<ActiveSupport::Callbacks::Callback:0x007fd1a16295d8
 @chain_config=
  {:scope=>[:kind],
   :terminator=>
    #<Proc:0x007fd1928375c8@/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
 ...

还有这个:

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

有没有办法获得选项或者&#39; if&#39;回调?

1 个答案:

答案 0 :(得分:1)

是的,accessor没有reader@if方法,已选中here。但您仍然可以使用instance_variable_get方法获取它。

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