Rails嵌套属性会破坏一些子属性并更新其他属性

时间:2018-04-27 10:45:54

标签: ruby-on-rails nested-attributes

我有父母和儿童模特。

# Attributes: name, age
has_many :children, class_name: 'Child'
accepts_nested_attributes_for :children

儿童

# Attributes :name, :age, :klass
belongs_to :parent

在ParentsController中

def update()
  @parent.update(parent_params)
end

def parent_params
  params.require(:parent).permit(:name, :age, :children_attributes => [:id, :name, :age, :klass])
end

例如: id为1的父有3个孩子,ID为[1,2,3]。我能够一次添加新孩子并更新现有孩子。

但我想删除id为1的孩子并更新id为2的孩子。 有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

经过一些研究后,我得到了解决方案。

http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

在父模型中添加allow destroy选项

accept_nested_attributes_for :children, allow_destroy: true

现在,我们可以通过在哈希中添加 _destroy:1 或任何真值来标记我们要删除的子哈希。

例如

Parent.find(1).update_attributes(name: "New Parent Name", children_attributes: [{id: 1, _delete: 1}, {id: 2, name: 'New Name', age: 12, klass: 5}])

这将更新父级并删除ID为1的子级,更新ID为2的子级,ID为3的子级将保持不变。