Если вы имеете дело с определенным классом и можете использовать именованный маршрут, это наиболее эффективный вариант. Но если вы имеете дело с вложенными ресурсами, а родительский ресурс не является фиксированным (например, в полиморфной ассоциации), и вы хотите указать формат, url_for не соответствует вашим потребностям.
К счастью, вы можете использовать polymorphic_url
.
Например, если server
может быть экземпляром ManagedServer или UnmanagedServer и оба могут иметь предупреждения, вы можете сделать это:
polymorphic_url([server, :alerts], :format => :xml)
и это даст вам
/managed_server/123/alerts.xml
/unmanaged_server/123/alerts.xml