Rails自动保存,不保存对关联的更改

问题描述 投票:1回答:2

我正在尝试执行以下操作,以通过自动保存对父子关联进行更改,但没有成功。

@child = @parent.childs.last
if child's attribute satisfies some condition
  @parent.something = "asd"
  @child.something = params[:something]
end

@parent.save

这只会保存对父级所做的更改。是否只有一种“保存”调用才能保存两个更改?

ruby-on-rails autosave
2个回答
0
投票

如何保存父对象并创建回调after_save,在其中写入更新其子对象的逻辑?

类似:

after_save :update_children

  def update_children
    children.update_all(something: something else)
  end


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类的简单实例。因此,您需要显式保存它。

© www.soinside.com 2019 - 2024. All rights reserved.