При использовании нового accepts_nested_attributes_for
в ActiveRecord можно использовать опцию :allow_destroy => true
. Когда этот параметр установлен, любой хеш, содержащий вложенные атрибуты, такие как {"_delete"=>"1", "id"=>"..."}
, переданный в update_attributes
, удалит вложенный объект.Удалите ассоциацию вместо разрушающего объекта, когда: allow_destroy => true
Простая установка:
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 на пользователя в nil)
Вопрос с бонусом: Что делать, если я также хочу изменить атрибут на вложенном объекте при удалении ассоциации? (Например, как установка состояния или временную метку)