【问题标题】:Rails : select ActiveSupport::Callbacks on optionsRails : 选择 ActiveSupport::Callbacks 选项
【发布时间】:2016-01-29 21:52:02
【问题描述】:

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

我用它来过滤它们:

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

我也在尝试在选项上过滤它们(即在“if”和“unless”数组上)。

我试过了

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

但显然没有'if'方法。

我很困惑,因为我有这个:

_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]

有没有办法获得回调的选项或“if”?

【问题讨论】:

    标签: ruby-on-rails callback activesupport


    【解决方案1】:

    是的,@if 没有 accessorreader 方法,检查了 here。但是你仍然可以使用instance_variable_get 方法获取它。

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

    【讨论】:

      猜你喜欢
      • 2012-10-03
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多