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

时间:2020-01-21 12:29:53

标签: ruby-on-rails autosave

我正在尝试执行以下操作,以使用自动保存功能更改父级和子级关联,但没有成功。

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

@parent.save

这仅保存对父级所做的更改。有没有一种方法可以仅通过一个“保存”调用来保存两个更改?

2 个答案:

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

相关问题