2016-12-17 4 views
0

Я пытаюсь получить URL-адрес или путь к ресурсу, не зная, какой класс он есть. У моего приложения много ресурсов, которые отображают страницы - подумайте о стране, городе и т. Д. - и, в частности, я хочу создать Sitemap. Я бы предпочел построить его на этом этапе, чем использовать драгоценный камень.Rails: Получить путь/url, не зная класса объекта (карта сайта для нескольких моделей)

Я рассмотрел этот учебник http://aspiringwebdev.com/sitemaps-in-rails-in-five-minutes/. Автор просто создает маршрут и контроллер, а затем передает переменную экземпляра, которую он циклически просматривает в представлении XML.

В Еврорадио, это выглядит следующим образом:

<% @countries.each do |entry| %> 
    <url> 
    <loc>http://yourdomain.com<%= country_path(entry) %></loc> 
    <priority>0.7</priority> 
    </url> 
<% end %> 

Есть 5 или 6 моделей я хотел бы обрабатывать, как это. Предпочтительно, я хотел бы сделать это в контроллере:

@entries = [Country.all, City.all, OtherModel1.all, OtherModel2.all] 

... затем сделать each петлю на этом одном случае переменной @entries. Но я не знаю, что использовать вместо country_path(...), city_path(...) и так далее.

Кто может помочь?

ответ

3

Попробуйте использовать polymorphic_path помощника:

Полиморфных URL хелпер методы интеллектуального разрешение на именованный вызов маршрута, когда данный экземпляр активной модели записи.

<% @entries.each do |entry| %> 
    <url> 
    <loc>http://yourdomain.com<%= polymorphic_path(entry) %></loc> 
    <priority>0.7</priority> 
    </url> 
<% end %> 

http://api.rubyonrails.org/classes/ActionDispatch/Routing/PolymorphicRoutes.html

+0

Perfect - работает как шарм! Из любопытства: Почему Rails не использует полиморфные URL-адреса помощников по всем направлениям? Связаны ли затраты на производительность? Или это ясность? – rubykatz

+0

Не уверен, может быть, вы могли бы взглянуть на реализацию. Пожалуйста, проверьте это как ответ, если это было хорошим решением. – fbelanger

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

  • Нет связанных вопросов^_^