无法在初始化程序中使用url_helpers link_to

时间:2015-10-29 07:53:40

标签: ruby-on-rails ruby-on-rails-4 initializer

所以我将String扩展到需要使用model_path函数的初始值设定项中:

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>

如果删除该include,我的应用程序视图将再次成功呈现。但删除包含,并且我对String类的扩展不再起作用。

我如何保留我的功能(如果需要的话,我可以将其移动到其他位置,只要它可以被我的所有模型访问)并保持视图呈现?

2 个答案:

答案 0 :(得分:1)

将url_helpers包含到String只是为了使用something_path方法就是用大炮射击麻雀。 Rails已经是一个很糟糕的monkeypatching,不需要添加更多(你几乎可以保证打破一些东西)。

减少影响并使用网址助手而不将它们混合在一起:

Rails.application.routes.url_helpers.user_path

我还建议不要延长String。如果您想添加新的字符串相关功能(如果它不存在,则为upcase),这是一个可以原谅的例外。似乎并非如此,所以不要这样做。

答案 1 :(得分:0)

要添加上一个答案,您可以在匹配的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

相同

希望这会有所帮助