Удалите ассоциацию вместо уничтожения объекта , когда :allow_destroy => true

StackOverflow https://stackoverflow.com/questions/1299617

Вопрос

При использовании нового 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'
  }
})
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top