2011-06-24 10 views
5

Я использую polimorphic_path, и это несколько багги. Этот метод требует некоторого вспомогательного маршрута, который не определен. Как я могу определить (например, обычный метод) собственный помощник маршрута, который будет использоваться как «model_name_path, model_name_url и т. Д.»?Как определить собственные помощники маршрутизации в рельсах 3?

ответ

2

Я знаю один возможный ответ для _path, но то же самое не работает для меня для _url. Кто-нибудь знает, почему?

# at the bottom of config/routes.rb 
module ActionView::Helpers::UrlHelper 
    def model_name_path model, args={} 
     # your implementation 
    end 
end 
+0

О, я думаю, что это тоже работает для _url, просто потому, что я вызывал _url из контроллера, а не из представления. – Ben

+0

Скажите, что у меня есть имя метода помощника user_links, где я указываю имя метода в соответствии с вашим, например. У меня есть модель Post. Мой код выглядит следующим образом: - ~ module ActionView :: Helpers :: UrlHelper def post_name_path post, args = {} # ваша реализация -> что именно должно быть? конец конец ~ – boddhisattva

+0

Прошу прощения, я попытался использовать соответствующий блок кода, но каким-то образом не смог понять это в разделе комментариев. – boddhisattva

4

Это решение сработало для меня.

Добавить этот код в конец config/routes.rb. Обязательно замените MyApp на ваше имя приложения.

MyApp::Application.routes.named_routes.module.module_eval do 
    def model_name_path(*args) 
    # Your code here 
    end 

    def model_name_url(*args) 
    # Your code here 
    end 
end 

MyApp::Application.routes.named_routes.instance_eval do 
    @helpers += [:model_name_path, :model_name_url] 
end 

Эти пользовательские методы будут доступны в контроллерах, представлениях и тестах.

+1

в Rails 4: Rails.application.routes.named_routes.url_helpers_module.module_eval do ... – luckyjazzbo