我正在尝试执行以下操作,以通过自动保存对父子关联进行更改,但没有成功。
@child = @parent.childs.last
if child's attribute satisfies some condition
@parent.something = "asd"
@child.something = params[:something]
end
@parent.save
这只会保存对父级所做的更改。是否只有一种“保存”调用才能保存两个更改?
如何保存父对象并创建回调after_save
,在其中写入更新其子对象的逻辑?
类似:
after_save :update_children
def update_children
children.update_all(something: something else)
end
默认情况下,仅自动保存新的关联记录。您需要通过向关联传递选项来启用自动保存机制,请参见https://api.rubyonrails.org/classes/ActiveRecord/AutosaveAssociation.html。
class Parent has_many :children, autosave: true end
注意,这仅是一种方法,如果您想保存父母,则在保存孩子时,需要相反的操作
class Child belongs_to: parent, autosave: true end
这仅在Rails知道您正在建立关联时有效。调用
@parent.childs.last
会返回一个Child
类的简单实例。因此,您需要显式保存它。