我有一个类似的协会:
class Contact
has_many :addresses
has_many :email_addresses
has_many :phone_numbers
end
我想在一次save
语句中保存所有记录(地址,电子邮件和电话)。为此,我写了下面的代码。
contact = Contact.new(contact_params)
contact.addresses.build(address_params1)
contact.addresses.build(address_params2)
contact.email_addresses.build(email_params1)
contact.email_addresses.build(email_params2)
contact.phone_numbers.build(phone_params1)
contact.phone_numbers.build(phone_params2)
contact.save
它确实保存了联系人,但没有保存其他记录。我在这里缺少什么?
注意:我没有使用任何表格来保存数据。我正在导入数据。
答案 0 :(得分:0)
在contact
模型中添加validates_associated
,然后检查
validates_associated :addresses, :email_addresses, :phone_numbers
答案 1 :(得分:0)
contact.valid?
必须为true。 contact.valid?
将始终为false 关于您的问题“它确实保存了联系人,但没有保存其他记录。”,您需要告诉rails您要保存子对象(如下图所示)。否则,rails将忽略其他对象。但是,即使你这样做了,你也会遇到我上面描述的问题。
#contact.rb
accepts_nested_attributes_for :addresses
...
我的建议:你可以使用交易。
代码示例:
#contacts_controller.rb
Contact.transaction do
contact = Contact.new(contact_params)
contact.addresses.build(address_params)
...
contact.save
end