Как удалить вложенные объекты в Rails3? - PullRequest
0 голосов
/ 23 марта 2011

Как я могу удалить вложенные объекты в форме?Я обнаружил, что мне нужно добавить :allow_destroy в родительскую модель по директиве accepts_nested_attributes_for.

Далее, я хочу ограничить удаление.Только вложенный объект следует удалять, если только родительский объект сохраняет ассоциацию.

Пример:

class Internship < ActiveRecord::Base
  belongs_to :company
  accepts_nested_attributes_for :company, allow_destroy => true
end

class Company < ActiveRecord::Base
  has_many :internships
end

Объяснение: AКомпания может принять много стажировок.Поэтому я не хочу удалять запись о компании, если с ней связана хотя бы одна другая стажировка.

Ответы [ 2 ]

2 голосов
/ 23 марта 2011

Вы можете использовать зависимый =>: уничтожить

class Internship < ActiveRecord::Base
  belongs_to :company
  accepts_nested_attributes_for :company, allow_destroy => true
end

class Company < ActiveRecord::Base
  has_many :internships, :dependent => :destroy
end
1 голос
/ 23 марта 2011

Если вы вернете false в фильтре before_destroy, действие уничтожения будет заблокировано.Таким образом, мы можем проверить, есть ли какие-либо стажировки, связанные с компанией, и заблокировать ее, если это так.Это сделано в фирменной модели.

class Company < ActiveRecord::Base
  has_many :internships

  before_destroy :ensure_no_internships

  private

    def ensure_no_internships
      return false if self.internships.count > 0
    end

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