Ruby on rails Rails:通过保存和设置外键保存记录
有没有更好的方法来编写此代码?我只是觉得它不适合我,我觉得有些东西真的像rails,我应该已经知道了:Ruby on rails Rails:通过保存和设置外键保存记录,ruby-on-rails,associations,belongs-to,Ruby On Rails,Associations,Belongs To,有没有更好的方法来编写此代码?我只是觉得它不适合我,我觉得有些东西真的像rails,我应该已经知道了: belongs_to :parent_in_use belongs_to :parent_template def after_create new_parent_in_use = ParentInUse.create!(self.parent_template.attributes) self.update_attribute(:parent_in_use_id, new_pare
belongs_to :parent_in_use
belongs_to :parent_template
def after_create
new_parent_in_use = ParentInUse.create!(self.parent_template.attributes)
self.update_attribute(:parent_in_use_id, new_parent_in_use.id)
end
创建记录后,我将使用所选的父模板,并基于它创建一个parent\u in\u use
记录。通过这种方式,模板可以更改,正在使用的记录将永远与我的对象共存。ParentInUse和ParentTemplate类都使用STI从父类继承
我相信这应该足够简单,但我不知道如何做,基本上我希望在一次操作中创建和分配记录。这将满足您的要求
def after_create
self.parent_in_use = ParentInUse.create!(parent_template.attributes)
end
然而,如果没有其他的改变,它不会对你有任何好处。由于外键存储在当前模型中,因此如果此关联是通过after_create回调创建的,则ActiveRecord不会保存更改。新的ParentInUse对象将被保存,但当前模型的数据库行不会用对应的ParentInUse id更新
在创建相应记录之前,我想100%确信当前的\u模型存在。如果模型无效,我假设它不会到达创建前回调?这是一个有效的假设。此外,所有回调都封装在单个事务中,如果其中任何回调返回false或引发错误,则整个事务将回滚。因此,除非一切顺利,否则不会创建ParentInUse。