我正在尝试执行以下操作,以使用自动保存功能更改父级和子级关联,但没有成功。
@child = @parent.childs.last
if child's attribute satisfies some condition
@parent.something = "asd"
@child.something = params[:something]
end
@parent.save
这仅保存对父级所做的更改。有没有一种方法可以仅通过一个“保存”调用来保存两个更改?
答案 0 :(得分:0)
如何保存父对象并创建回调after_save
,并在其中编写更新其子对象的逻辑?
类似:
after_save :update_children
def update_children
children.update_all(something: something else)
end
答案 1 :(得分:0)
默认情况下,仅自动保存新的关联记录。您需要通过向关联传递选项来启用自动保存机制,请参见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
类的一个简单实例。因此,您需要显式保存它。