Rails:如何从控制器的before_action / after_action方法INLINE中调用ApplicationController方法WITH ARGS?

时间:2017-03-01 12:33:14

标签: ruby-on-rails

我在应用程序控制器上有set_pagination_header,我需要从其他控制器调用它:

# syntax error in line below
after_action :set_pagination_header, :my_argument_object, only: [:index]

def index
  @my_argument_object = Resource.page(1)
  render json: @my_argument_object
end

我可以直接发送原始@my_argument_object,所以我不想这样做:

def set_pagination_header(name, options = {})
    scope = instance_variable_get("@#{name}")
    # some_logic_here
end

1)什么是正确的语法(需要内联语法)?

2)为什么set_pagination_header(object, options = {})不是定义?

编辑:我发现了here之类的内容

after_filter only: [:index] { set_pagination_header(:germs) }

这是旧语法,我们现在得到了after_action。尽管如此,我相信有一种内联方式可以做到这一点,不是吗?

# I tried and that didn't work
after_action :set_pagination_header(:my_argument_object), only: [:index]
after_action { :set_pagination_header(:my_argument_object) } only: [:index]
after_action { :set_pagination_header, :my_argument_object } only: [:index]

2 个答案:

答案 0 :(得分:0)

您只需要为回调添加方法调用

after_action :set_pagination_header_callback, only: :index

def set_pagination_header_callback
  set_pagination_header(...your variables here...)
end

# application_controller.rb
def set_pagination_header(name, options = {})
  scope = instance_variable_get("@#{name}")
  # some_logic_here
end

答案 1 :(得分:0)

内联方式,但不是那么干净!

after_action Proc.new{ set_pagination_header(:paged_orders) }, only: [:index]