Rails 5.0.2 - 关于belongs_to / has_many的ID

时间:2017-04-26 10:05:46

标签: ruby-on-rails activerecord

我是RAILS的新手,所以不要打我。 我考虑过这样的问题:

- author
    has_many :books
- book
    belongs_to :author

在控制台中,我按照例子创建了一个新作者:

ar = Author.new(fname: "Frank", lname: "Herbert")

保存前未设置此记录的ID。

然后我从对象ar创建了一些书:

ar.books.new(title: "Dune"), ar.books.new(title: "The Green Brain")

没有错误。但是当我列出书籍时:

ar.books.all

得到一个空列表。 我发现首先我必须保存ar,然后才能添加书籍。

有没有办法保存ar书籍,之前不需要保存ar没有书籍?

2 个答案:

答案 0 :(得分:1)

按照以下代码: 首先创建作者,然后创建作者作为外键的书籍。

ar = Author.new(fname: "Frank", lname: "Herbert")
ar.save

ar.books.create(title: "Dune")
ar.books.create(title: "The Green Brain")

OR

ar = Author.new(fname: "Frank", lname: "Herbert")
ar.books.build(title: "Dune")
ar.books.build(title: "The Green Brain")
ar.save

答案 1 :(得分:1)

当然可以!

您需要致电ar.books查找已添加的图书。当你调用ar.books.all ActiveRecord尝试在数据库中找到某些东西时(显然它返回空数组)。所以只是:

author = Author.new(fname: "Frank", lname: "Herbert")
author.books.build(title: "Dune")
author.save

它将保存作者和你期望的书籍。顺便说一句,使用build方法代替new。通过这种方式,您可以表明即将创建记录。