Как показать все связанные элементы в json_response в Rails - PullRequest
0 голосов
/ 26 апреля 2018

Я работаю над приложением Rails на основе API, я не знаю, как показать все связанные элементы в одном запросе, как мои модели

todo.rb

class Todo < ApplicationRecord
    has_many :items, dependent: :destroy
    validates_presence_of :title, :created_by
end

item.rb

class Item < ApplicationRecord
    belongs_to :todo
    validates_presence_of :name
end

в контроллере

def show
    json_response(@todo)
end

private
def set_todo
    @todo = Todo.find(params[:id])
end

Конечная точка для одного задания

https://example.com/todos/1

и показывается вот так

{
    "id": 1,
    "title": "Hello World!",
    "created_by": "2",
    "created_at": "2018-04-26T11:19:31.433Z",
    "updated_at": "2018-04-26T11:19:31.433Z"
}

У меня вопрос, как мне показать все items, которые были созданы этим todo в одном запросе конечной точки.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Попробуйте использовать ActiveModel :: Сериализаторы :: JSON # as_json

Например,

def show
  render json: @user.as_json(include: :posts), status: 200
end

Это должно вернуть ответ как

{
  "id": 1,
  "name": "Konata Izumi",
  "age": 16,
  "created_at": "2006/08/01",
  "awesome": true,
  "posts": [
    {
      "id": 1,
      "author_id": 1,
      "title": "Welcome to the weblog"
    },
    {
      "id": 2,
      "author_id": 1,
      "title": "So I was thinking"
    }
  ]
}
0 голосов
/ 26 апреля 2018
def show
  render json: {"todos" => {"todo" => @todo, "items" => @todo.items }}, status:200
end

В качестве альтернативы вы можете использовать сериализаторы для дополнительных фильтров и модификаций данных ответа

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...