不能在初始值设定项中使用 url_helpers link_to

Can't use url_helpers link_to in initializer

所以我在需要使用 model_path 函数的初始化程序中扩展 String:

class String
  def foo(bar)
    ...
    link_to(baz, baz_path(baz))
  end
end

所以为了让它工作,我添加了

include Rails.application.routes.url_helpers

现在的问题是我什至无法查看该网站,因为在其他地方使用 url_for 会出现奇怪的问题:

wrong number of arguments (3 for 0..1)

  </script>
  <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
--<%= mathjax_tag %>------- this line is highlighted as the problem --
  <%= csrf_meta_tags %>
</head>
<body>

如果我删除该包含,我的应用程序视图将再次成功呈现。但是删除那个包含,我对字符串 class 的扩展不再起作用。

如何保持我的函数的功能(如果需要,我可以将它移到别处,只要我的所有模型都可以访问它)并保持呈现的视图?

将url_helpers纳入String只是为了使用something_path的方法就是用大炮打麻雀。 Rails 已经是一堆乱七八糟的 monkeypatching,不需要添加更多(你几乎可以保证会破坏某些东西)。

降低影响力并使用 url 助手而不将它们混入:

Rails.application.routes.url_helpers.user_path

我还建议根本不要延长 String。如果您想添加新的与字符串相关的功能(例如 upcase 如果它不存在的话),这是一个可以原谅的例外。好像不是这样,就别做了

要添加上一个答案,您可以在匹配的 URL 上使用 Rails.application.routes.url_helpers,只需添加路由 :as,如下例所示:

get "sessions/destroy/:param_id", as: :logout 

因此您可以按如下方式使用它:

Rails.application.routes.url_helpers.logout_path(:param_id => your_value)

这与 url_for

的作用相同

希望这会有所帮助