Rails 嵌套属性破坏了一些 children 属性并更新了一些其他属性
Rails Nested Attributes destroy some children attributes and update some others
我有 Parent 和 Child 个模型。
Parent
# Attributes: name, age
has_many :children, class_name: 'Child'
accepts_nested_attributes_for :children
Child
# 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
例如:
Parent id 1 有 3 个 children id 为 [1,2,3]。我已经能够一次添加新的 children 和更新现有的 children。
但我想删除 ID 为 1 的 child 并更新 ID 为 2 的 children。
有人可以帮助我吗?
经过更多研究,我得到了解决方案。
http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html
在父模型中添加允许销毁选项
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 的子级将保持不变。
我有 Parent 和 Child 个模型。
Parent
# Attributes: name, age
has_many :children, class_name: 'Child'
accepts_nested_attributes_for :children
Child
# 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
例如: Parent id 1 有 3 个 children id 为 [1,2,3]。我已经能够一次添加新的 children 和更新现有的 children。
但我想删除 ID 为 1 的 child 并更新 ID 为 2 的 children。 有人可以帮助我吗?
经过更多研究,我得到了解决方案。
http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html
在父模型中添加允许销毁选项
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 的子级将保持不变。