У меня есть модель, которая отвечает за управление путями к ресурсам. Если возможно, я хотел бы использовать несколько помощников по маршрутизации Rails. Я не хочу делать никаких предположений о типе ресурса, которым управляют, поскольку я хотел бы, чтобы это было общим.
http://edgeguides.rubyonrails.org/routing.html # create-paths-and-urls-from-objects заявляет, что «Вы также можете использовать url_for с набором объектов, и Rails автоматически определит, какой маршрут вам нужен:»
<%= link_to 'Ad details', url_for([@magazine, @ad]) %>
Из того, что я обнаружил, помощники url_for обычно ожидают хеша, который включает контроллер, действие и т. Д. То, что я искал, - это то, что, по-видимому, возвращает вышеуказанный url_for, то есть путь к ресурсу из массива объектов. Я не уверен, что использую просто неправильное пространство имен, но просматривая документы API, я не могу найти пространство имен, которое предоставило бы вышеуказанный метод.
Чтобы уточнить, я пытаюсь сделать что-то подобное в модели:
resource_array = [parent_resource, child_resource]
resource_path = url_for(resource_array)
Обычно я оставляю любой код маршрутизации вне класса модели, но этот класс предназначен для управления путями к ресурсам. Заранее спасибо.
Изменить: Это синтаксис, который я в итоге использовал:
Rails.application.routes.url_helpers.polymorphic_path(resource)
Изменить (2): Я чувствую, что должен быть лучший способ сделать это, но это то, что у меня есть прямо сейчас.
resource_path = ''
resource_array.each do |resource|
resource_path += '/' + resource.class.name.pluralize.underscore + '/' + resource.id.to_s
end
1 ответ
Я не уверен, что это именно то, что вы просите, но url_for
- это метод экземпляра модуля ActionDispatch::Routing::UrlFor
, поэтому вам нужно extend
или include
этот модуль чтобы получить доступ к методу.
Похожие вопросы
Новые вопросы
ruby-on-rails
Ruby on Rails - это полнофункциональная платформа веб-приложений с открытым исходным кодом, написанная на Ruby. Он следует популярной модели фреймворка MVC и известен своим подходом «соглашение поверх конфигурации» при разработке приложений.