В некоторых случаях полезен отдельный путь к ресурсу. Если ваши идентификаторы ресурсов являются нечисловыми именами, определенными пользователем, возможны конфликты маршрутизации. Пример:
/ application / new -> создать новое приложение или показать приложение пользователя с именем new?
В этой ситуации вы можете ограничить пользовательский ввод, чтобы избежать конфликта, или это можно обойти, переписав поведение Rails 3 по умолчанию:
class ActionDispatch::Routing::Mapper
module Resources
RESOURCE_OPTIONS << :singular_resource
class Resource
def member_scope
@options[:singular_resource] ? "#{singular}/:id" : "#{path}/:id"
end
def nested_scope
@options[:singular_resource] ? "#{singular}/:#{singular}_id" : "#{path}/:#{singular}_id"
end
end
end
end
Тогда при указании нового ресурса маршрута:
resources :applications, :singular_resource => true
Который будет генерировать маршруты:
GET /applications
GET /applications/new
POST /applications
GET /application/:id
GET /application/:id/edit
PUT /application/:id
DELETE /application/:id