在一个语句中为两个模型创建记录

时间:2014-07-25 14:21:32

标签: ruby-on-rails ruby-on-rails-4

是否有更简洁的写作方式:

> e = Entity.create(name: 'foo')
#<Entity id: 1, name: "foo", created_at: "2014-07-25 13:57:08", updated_at: "2014-07-25 13:57:08">

> l = Location.create(address: 'New York, NY')
#<Location id: 1, address: "New York, NY", created_at: "2014-07-25 13:57:08", updated_at: "2014-07-25 13:57:08">

> e.location = l
> e.save

这不起作用:

> Entity.create(name: 'foo').location.create(address: 'New York, NY')

实体has_one位置,如果相关的话。

2 个答案:

答案 0 :(得分:2)

对于has_one关联,您可以使用create_association,因此对您而言,这应该有效:

Entity.create(name: 'foo').create_location(address: 'New York, NY')

Rails Guide on assocations包含自动添加的这些方法的列表。

我可能仍然会使用另一个答案,因为这样可以更容易地通过表单等创建嵌套位置。

答案 1 :(得分:1)

我可能错了,因为我从未通过命令行尝试过,但我认为没有理由你添加

accepts_nested_attributes_for :location到实体

你无法做到:

Entity.create(name: 'foo', location_attributes: {address: 'New York, NY'})