Удалите ассоциацию вместо уничтожения объекта , когда :allow_destroy => true
-
18-09-2019 - |
Вопрос
При использовании нового accepts_nested_attributes_for
в ActiveRecord можно использовать опцию :allow_destroy => true
.Когда этот параметр установлен, любой хэш, содержащий вложенные атрибуты, такие как {"_delete"=>"1", "id"=>"..."}
переданный в update_attributes
удалит вложенный объект.
Простая настройка:
class Forum < ActiveRecord::Base
has_many :users
accepts_nested_attributes_for :users, :allow_destroy => true
end
class User < ActiveRecord::Base
belongs_to :forum
end
Forum.first.update_attributes("users_attributes"=>{"0"=>{"_delete"=>"1", "id"=>"42"}})
Вопрос: Как мне - вместо удаления вложенных объектов, когда "_delete" => "1"
- просто убрать ассоциацию?(т.е.В приведенном выше случае установите forum_id для пользователя равным нулю)
Бонусный вопрос: Что делать, если я также хочу изменить атрибут an для вложенного объекта при удалении ассоциации?(например,например, установка состояния или метки времени)
Решение
Вместо того, чтобы запрашивать удаление пользователя с помощью "_delete" => '1'
, вы не можете просто обновить его, используя nested_attributes?:
Forum.first.update_attributes("users_attributes"=> {
"0" => {
"id" => "42",
"forum_id" => "",
"state" => 'removed'
}
})