Вложенные атрибуты Rails уничтожают некоторые дочерние атрибуты и обновляют некоторые другие - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть модели для родителей и детей.

Родитель

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

Child

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

В родительском контроллере

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

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

Например: Родитель с идентификатором 1 имеет 3 детей с идентификаторами [1,2,3]. Я был в состоянии добавлять новых детей и обновлять существующих детей одновременно.

Но я хочу удалить ребенка с идентификатором 1 и обновить детей с идентификатором 2. Может ли кто-нибудь помочь мне в этом?

1 Ответ

0 голосов
/ 27 апреля 2018

Я получил решение после еще одного исследования.

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}])

Это обновит родительский элемент, а также удалит дочерний элемент с идентификатором 1, обновит дочерний элемент с идентификатором 2, а дочерний элемент с идентификатором 3 останется нетронутым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...