Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 由于无法获得作者的书籍,ruby有许多_Ruby On Rails_Ruby_Migration - Fatal编程技术网

Ruby on rails 由于无法获得作者的书籍,ruby有许多

Ruby on rails 由于无法获得作者的书籍,ruby有许多,ruby-on-rails,ruby,migration,Ruby On Rails,Ruby,Migration,我对ruby是新手。我有两种型号的书和作者。我想应用两个模型之间的关联。书籍属于一位作者,一位作者可以拥有多本书。这是我的模型 class Book < ApplicationRecord belongs_to :author validates :name, presence: true validates :body, presence: true validates :author_id, presence: true end 但是当我击球的时候,我会得到这样的回答

我对ruby是新手。我有两种型号的
作者
。我想应用两个模型之间的关联。书籍属于一位作者,一位作者可以拥有多本书。这是我的模型

class Book < ApplicationRecord
  belongs_to :author
  validates :name, presence: true
  validates :body, presence: true
  validates :author_id, presence: true
end
但是当我击球的时候,我会得到这样的回答。这里我看不到图书信息。我需要添加任何特定代码吗?或者说交往是不够的

[
    {
        "id": 1,
        "name": "Miss Mora Bogan",
        "age": "20",
        "created_at": "2019-12-07T06:22:27.251Z",
        "updated_at": "2019-12-07T06:22:27.251Z"
    },
]

json中得到的只是db中表字段的值。books和authors之间关系的author外键存储在books表中,而不是同时存储在books表中,因此要获取有关books的信息,您需要在controller方法中告诉从books表中加入哪些内容。

如果要控制json响应的外观,有许多选项。已经在rails中使用,您可以执行以下操作

#app/views/books/index.json.jbuilder
json.array@书做书|
json.name book.name
json.body book.body
json.author.do
json.name book.author.name
json.age book.author.age
结束
结束
使用jbuilder可以用更短的方法实现同样的目标。结帐


您仍然需要在控制器中正确执行响应和格式化。

假设您希望以
json
格式调用
index
操作。(
http://localhost:3000/authors.json

在呈现JSON时,您需要包含关联的模型,因此,对于该控制器,控制器应如下所示:

# authors_controller.rb

class AuthorsController < ApplicationController
  def index
    @authors = Author.all

    respond_to do |format|
      format.json { render json: @authors, include: [:books] }
    end
  end
end
#authors_controller.rb
类AuthorsController

参考:

发布你的
索引
作者的行动代码
索引
书籍的行动代码控制器.rb你的问题是什么?如何让
/authors
也返回作者的书籍?或者如何使用
/authors
中的信息从
/books
加载相应的书籍?顺便问一下,你的控制器看起来怎么样?
[
    {
        "id": 1,
        "name": "Miss Mora Bogan",
        "age": "20",
        "created_at": "2019-12-07T06:22:27.251Z",
        "updated_at": "2019-12-07T06:22:27.251Z"
    },
]
# app/views/authors/index.json.jbuilder

json.array! @authors do |author|
  json.name author.name
  json.age  author.age
  json.books author.books do |book|
    json.name book.name
    json.body book.body
  end
end
# authors_controller.rb

class AuthorsController < ApplicationController
  def index
    @authors = Author.all

    respond_to do |format|
      format.json { render json: @authors, include: [:books] }
    end
  end
end