gpt4 book ai didi

ruby - 在保存记录之前创建关联

转载 作者:数据小太阳 更新时间:2023-10-29 06:44:12 25 4
gpt4 key购买 nike

所以,我承认我是 Rails 的新手,我遇到了一个相当普遍的问题,但我在这里找不到答案。

我有一个像这样的模型 Foo:

class Foo < ActiveRecord::Base
has_many :bars
end

Bars belongs_to Foo,一切正常。现在我想同时创建一个 Foo 和构建 Bar 。像这样:

f = Foo.new(:baz => 'baz')
bars.each do |b|
f.bars.build(:bizzy => b[:bizzy])
end
f.save

我知道这行不通,因为父记录不存在,所以关联也不存在,但必须有办法做到这一点。我通过对此进行编辑暂时解决了这个问题:

f = Foo.new(:baz => 'baz')
f.save
f = Foo.find(:first, :conditions => {:baz => 'baz'})
bars.each do |b|
f.bars.create(:bizzy => b[:bizzy])
end

但这并不干净,而且到处都是不愉快的。

正确的做法是什么?

最佳答案

在第一行中,您可以只使用create 而不是new。您不需要 f.bars.createf.bars.build,因为 bar 对象已经存在。我会这样做:

f = Foo.create(:baz => 'baz')

bars.each do |b|
f.bars << b
end

就我个人而言,我不会遍历 bars,而只是使用 update_all:

f = Foo.create(:baz => 'baz')
bars.update_all(:foo_id => f.id)

编辑:可以在不先保存记录的情况下执行此操作。这对我有用:

f = Foo.new(:baz => 'baz')

bars.each do |b|
f.bars << b
end

f.save

关于ruby - 在保存记录之前创建关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10089592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com