我想在控制器的方法中在数据库中进行两次插入操作:
a = A.new(:dog_id => b.id, ...)
a.save
b = B.new(:cat_id => a.id , ... )
b.save
我是如何做到这一点的,因为我需要a中的a的id和b中的b的id
答案 0 :(得分:2)
首先使用正确的关联设置模型A + B
Model Cat
has_one :dog
accepts_nested_attributes_for :dog
Model Dog
has_one :cat
accepts_nested_attributes_for :cat
我将模型基于您提供的代码,其中A的每个实例只能有一个B,反之亦然。您也可以使用belongs_to代替old explanation from 2006
Accepts_nested_attributes_for允许您在原始模型accepts_nested_attributes_for的参数中传递关联模型的属性 请注意,如果您需要many_to_many try has_and_belongs_to_many
,此关系只能接受A和B(猫和狗)之间的单一关系在控制器中构建模型的实例并设置它们的关联。
this_cat = Cat.new(cat_attributes{dog_attributes})
this_cat.save!
非常肯定有几种方法可以做到这一点,但正如Aldo所说,问题代码的更多细节将有助于澄清一些关联 - 因为我可能会错误地想到你希望如何功能
不使用accepts_nested_attributes_for的另一种方法是构建A和B的每个实例,保存其中一个,执行关联然后保存它们。
this_cat = Cat.new(cat_attributes)
this_dog = Dog.new(dog_attributes)
this_dog.save!
this_cat.dog = this_dog
this_cat.save!
this_dog.save!
答案 1 :(得分:1)
A,B,C?你有什么要做的?如果您的Category
模型有许多狗,而Dog
模型属于某个类别,那么您只需拥有类别,当您创建新狗时,只需使用dog.category = Category.find_by_name(category_name)
分配类别
...但我怀疑你在狗和类别之间存在某种多对多的关系,在这种情况下你需要另一个模型和数据库表......
更新:对我没有任何意义,尝试提供更多详细信息......另一个想法是创建两个对象,然后更新:
# Create the two objects
a = A.create
b = B.create
# Update a with the B id
a.dog = b
a.save
# Update b with the A id
b.cat = a
a.save
但同样,你应该更新你的答案来解释你想要实现的目标