Только на Rails 6, когда:
Я получаю ответ json на страницах с URL-адресом:
www.site.com/foo
, а не когда URL-адрес имеет вид:
www.site.com/foo?q=x
Воспроизвести:
- рельсы new todo
- эстакада рельсов Задача Todo: строка
rails db: migrate
сервер rails
- Создать задачу
В файле show.json.jbuilder вы увидите:
json.partial! "todos / todo", todo: @ todo
Перейти к странице показа (todo / 1)
Введите в консоли браузера команду se jsonответ:
$. ajax ({url: window.location.href + ".json", dataType: 'json', async: false});
Когда ваш URL "todo / 1", jbuilder загружается нормально:
Started GET "/todos/1.json" for ::1 at 2019-10-28 13:55:54 -0300
Processing by TodosController#show as JSON
Parameters: {"id"=>"1"}
Todo Load (0.3ms) SELECT "todos".* FROM "todos" WHERE "todos"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]]
↳ app/controllers/todos_controller.rb:67:in `set_todo'
Rendering todos/show.json.jbuilder
Rendered todos/_todo.json.jbuilder (Duration: 1.0ms | Allocations: 125)
Rendered todos/show.json.jbuilder (Duration: 2.2ms | Allocations: 306)
Completed 200 OK in 10ms (Views: 3.9ms | ActiveRecord: 0.3ms | Allocations: 1565)
Но если ваш URL "todo / 1? Q = foo"у вас нет данных:
Started GET "/todos/1?q=foo.json" for ::1 at 2019-10-28 13:55:44 -0300
Processing by TodosController#show as JSON
Parameters: {"q"=>"foo.json", "id"=>"1"}
Todo Load (0.2ms) SELECT "todos".* FROM "todos" WHERE "todos"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]]
↳ app/controllers/todos_controller.rb:67:in `set_todo'
Rendering todos/show.html.erb within layouts/application
Rendered todos/show.html.erb within layouts/application (Duration: 0.7ms | Allocations: 89)
Completed 200 OK in 25ms (Views: 21.3ms | ActiveRecord: 0.2ms | Allocations: 6547)
Obs: я открыл этот rails github выпуск