Ответ Json на рельсах 6 от URL с запросами - PullRequest
0 голосов
/ 27 октября 2019

Только на Rails 6, когда:

Я получаю ответ json на страницах с URL-адресом:

www.site.com/foo

, а не когда URL-адрес имеет вид:

www.site.com/foo?q=x

Воспроизвести:

  1. рельсы new todo
  2. эстакада рельсов Задача Todo: строка
  3. rails db: migrate

  4. сервер rails

  5. Создать задачу
  6. В файле show.json.jbuilder вы увидите:

    json.partial! "todos / todo", todo: @ todo

  7. Перейти к странице показа (todo / 1)

  8. Введите в консоли браузера команду 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)

enter image description here

Но если ваш 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)

enter image description here

Obs: я открыл этот rails github выпуск

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

Для работы в rails 6.0.0 нам нужно явно указать, чтобы использовать формат json, когда у URL есть запросы:

todos_controller.rb

изменить с:

def show 
end

до:

def show
    respond_to do |format|
      format.html
      format.json
    end
end
0 голосов
/ 28 октября 2019

Это потому, что запрос должен быть в следующей форме:

www.site.com/foo.json?q=x

Если вы хотите передать параметры в запрос, вы можете использовать параметр data ajax.

Например:

$.ajax({
  url: "/todos",
  type: "GET",
  data: {
    id: 1,
    q: "x"
  },
  success: function (response) {
    console.log(response.data)
  }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...