所以我将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类的扩展不再起作用。
我如何保留我的功能(如果需要的话,我可以将其移动到其他位置,只要它可以被我的所有模型访问)并保持视图呈现?
答案 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
相同希望这会有所帮助