Принуждение ActiveScaffold к удалению ассоциации вместо установки внешнего ключа на ноль - PullRequest
0 голосов
/ 16 июня 2011

Я использую ActiveScaffold в проекте RoR 2.2.В моем приложении две модели:

class Foo << ActiveRecord::Base
 belongs_to :bar
end

class Bar << ActiveRecord::Base
 has_many :foos
end

Когда я редактирую экземпляр Bar, все экземпляры foo, принадлежащие этой панели, отображаются в форме с кнопкой «Удалить» рядом с каждой.

Когда я удаляю один из них и затем нажимаю кнопку Обновить, ActiveScaffold сейчас устанавливает для Foo.bar_id значение nil и выдает и обновляет оператор, например UPDATE foo set bar_id = null ....

Есть ли способ удалить связь избаза данных (т.е. delete foo where foo_id = ...) вместо?

Ответы [ 2 ]

0 голосов
/ 21 ноября 2011

Я использую это в Rails 3.1.

При удалении документа все связанные с ним DocumentFoo также удаляются.

class Document < ActiveRecord::Base
  has_many :document_foos

  before_destroy { |record| DocumentFoo.destroy_all "document_id = #{record.id}" }
end

Br, Jonas

0 голосов
/ 16 июня 2011

Что-то вроде следующего должно достичь эффекта, который вы ищете. Имейте в виду, что я не запускал и не проверял этот код.

class Bar < ActiveRecord::Base

  has_many :foos, :dependent => :destroy, :after_remove => :delete_orphan

  def delete_orphan(foo)
    foo.destroy
  end

end

Редактировать : переключен на более конкретный обратный вызов

...