Rails 5.2.2.1
ruby 2.6.3p62
Я пишу конечную точку API, которая должна принимать почтовый запрос. Я создал маршрут:
namespace :api do
scope module: :v1, constraints: Example::ApiVersionConstraint.new(1) do
resources 'books', only: [:create]
end
end
bundle exec rails routes | grep books
возвращает:
api_books POST /api/books(.:format) api/v1/books#create
app/controllers/api/v1/books_controller.rb
:
class Api::V1::BooksController < Api::BaseController
attr_reader :book
def create
book = Book.build(title: 'test')
if book.save
render json: book
else
render json: { error: 'error' }, status: 400
end
end
end
сервер работает на порте 3000 и при отправке запроса POST на http://localhost:3000/api/books.json
с помощью Почтальона я получаю этот ответ:
{
"errors": [
{
"code": "routing.not_found",
"status": 404,
"title": "Not found",
"message": "The path '/api/books' does not exist."
}
],
"request": ""
}
lib/example/api_version_constraint.rb
:
module Example
class ApiVersionConstraint
def initialize(version)
@version = version
end
def matches?(request)
request.headers.fetch(:accept).include?("version=#{@version}")
rescue KeyError
false
end
end
end
почему запрос не находит маршрут?