覆盖命名路由助手

时间:2021-02-22 12:03:17

标签: ruby-on-rails

我想向命名的路由/url 助手添加一些逻辑:

# app/helpers/my_helper.rb

module MyHelper
  def article_path(obj, opts = {})
    opts.merge!(token: @redis.get("token"))
    super(obj, opts)
  end
end

我也喜欢在每个控制器中获得相同的逻辑,所以我将它包含在我的 ApplicationController 中:

class ApplicationController < ActionController::Base
  include TokenRoutesHelper 
end

在一个视图中,helper 被覆盖,一切正常。但在控制器内部,它不会覆盖 article_path 助手。我也尝试过 prepend TokenRoutesHelper,但这也不起作用。

我查看了 pry 的方法,似乎 Rails 将自己命名的路由助手放在任何包含的助手之前,甚至通过 prepend 添加时:

[1] pry(#<ArticlesController>)> show-source article_path

From: /usr/local/bundle/gems/actionpack-5.2.4.5/lib/action_dispatch/routing/route_set.rb:322:
Owner: #<Module:0x000055b67aa85bc0>
Visibility: public
Signature: article_path(*args)
Number of lines: 11

define_method(name) do |*args|
  last = args.last
  options = \
    case last
    when Hash
      args.pop
    when ActionController::Parameters
      args.pop.to_h
    end
  helper.call self, args, options
end
[2] pry(#<ArticlesController>)> show-source article_path --super

From: /usr/src/app/app/helpers/my_helper.rb:4:
Owner: MyHelper
Visibility: public
Signature: article_path(obj, opts = {})
Number of lines: 4

def article_path(obj, opts = {})
  opts.merge!(token: @redis.get("token"))
  super(obj, opts)
end
[3] pry(#<ArticlesController>)>

那么,Rails 有没有办法覆盖它自动生成的 url 助手?

0 个答案:

没有答案