EmFi правый. Я не ответил на этот вопрос, просто высказал свое мнение.
Включите следующий код в файл инициализатора в директории инициализаторов config внутри вашего приложения Rails. То, что вы называете файлом, не имеет значения для фреймворка, так как все файлы в этом каталоге находятся в пути загрузки. Я предлагаю вам назвать это actioncontroller_resource_monkeypatch.rb
, чтобы сделать намерение понятным.
ActionController::Resources.module_eval do
def map_resource_routes(map, resource, action, route_path, route_name = nil, method = nil, resource_options = {})
if resource.has_action?(action)
action_options = action_options_for(action, resource, method, resource_options)
formatted_route_path = route_path.match(/\/:format\//) ? route_path : "#{route_path}.:format"
if route_name && @set.named_routes[route_name.to_sym].nil?
map.named_route(route_name, formatted_route_path, action_options)
else
map.connect(formatted_route_path, action_options)
end
end
end
end
Мой ответ использует тот же метод, как EmFi-х, т.е. путем monkeypatching ActionController::Resources#map_resource_routes
. Я решил бросить свою шляпу на ринг, потому что она не предлагала полную реализацию, которая оставалась для вас упражнением. Я также считаю, что тройное назначение formatted_route_path
намного чище и более кратким, чем блок if-else/if-else. Еще одна строка кода вместо пяти! Это самое меньшее, что я могу сделать за 200 щедростей!
Теперь запустите rake routes
new_api_v1_company GET /api/v1/:format/company/new {:action=>"new", :controller=>"api/v1/companies"}
edit_api_v1_company GET /api/v1/:format/company/edit {:action=>"edit", :controller=>"api/v1/companies"}
api_v1_company GET /api/v1/:format/company {:action=>"show", :controller=>"api/v1/companies"}
PUT /api/v1/:format/company {:action=>"update", :controller=>"api/v1/companies"}
DELETE /api/v1/:format/company {:action=>"destroy", :controller=>"api/v1/companies"}
POST /api/v1/:format/company {:action=>"create", :controller=>"api/v1/companies"}
TADA!
Я понимаю, но при условии, что я поместил другое расширение в конце своего URI, я могу переопределить формат custom: format, там должен быть предоставлен формат, вот почему я считаю, что я должен поместить его здесь. – Garrett
Просто прямо, я не хочу, чтобы пользователь мог добавлять формат вообще. – Garrett