2015-10-29 2 views
0

Так я простирающийся String в инициализаторе, который требует model_path функцию, которая будет использоваться:Невозможно использовать url_helpers link_to в инициализаторе

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

Должно ли это быть в 'String'? Кажется, это плохая идея для меня. Попробуйте поместить его в отдельный класс. 'UrlUtil.foo (bar)' –

+0

Другая идея: как насчет смешивания url_helpers? Используйте его напрямую: 'Rails.application.routes.url_helpers.user_path' –

+0

В моделях можно использовать дубликаты [Can Rails Helpers (например, mymodel \ _path (model))] (http://stackoverflow.com/questions/ 341143/can-rails-routing-helpers-ie-mymodel-pathmodel-be-used-in-models) –

ответ

1

Включая url_helpers в String только для использования something_path метод стреляет воробьи с пушкой. Rails уже большой беспорядок monkeypatching, не нужно добавлять больше (вы почти гарантированно что-то сломаете).

быть менее эффектным и использовать URL-адрес хелперы, не смешивая их в:

Rails.application.routes.url_helpers.user_path 

Я хотел бы также посоветовать не продлевать String вообще. Исключительным исключением может быть, если вы хотите добавить новые связанные с строкой функции (что-то вроде upcase, если оно не существует). Кажется, это не так, поэтому не делайте этого.

+0

Где бы вы порекомендовали, я тогда поставил эту вспомогательную функцию? – wrongusername

+0

Как указано в комментариях выше, отдельный класс/модуль использования –

Смежные вопросы