2

При использовании нового 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)

Вопрос с бонусом: Что делать, если я также хочу изменить атрибут на вложенном объекте при удалении ассоциации? (Например, как установка состояния или временную метку)

ответ

2

Вместо того, чтобы просить пользователь должен быть удален с помощью "_delete" => '1', вы можете не просто обновить его с помощью nested_attributes ?:

Forum.first.update_attributes("users_attributes"=> { 
    "0" => { 
    "id" => "42", 
    "forum_id" => "", 
    "state" => 'removed' 
    } 
}) 

 Смежные вопросы

  • Нет связанных вопросов^_^