Как автоматически удалить осиротевшую сущность в моем приложении Rails?

Я использую Rails 4.2.7. Есть ли способ автоматически удалить осиротевшую сущность, когда у меня больше нет объекта, указывающего на нее? У меня есть эти две модели...

class MyObject < ActiveRecord::Base
  belongs_to :address, :autosave => true, dependent: :destroy


class Address < ActiveRecord::Base
  has_one :my_object

и в моей таблице "my_objects" PostGres у меня есть столбец "address_id", который является внешним ключом таблицы адресов. Ниже мой метод, который я использую, чтобы сохранить мой объект "MyObject" с сопровождающим его адресным объектом…

  def save_with_address(params)
    transaction do
      if !params[:address].nil?
        # Address isn't an object yet, it is just a bunch of parameters
        params[:address][:state] = params[:address][:state].nil? ? nil : State.find_by_id(params[:address][:state])
        params[:address][:country] = params[:address][:country].nil? ? nil : Country.find_by_id(params[:address][:country])
        address = Address.new(params[:address])
        address.user = self
        address.save
        self.address = address
      end

      # Save the object
      save
    end
  end

Но я замечаю, что если объект my_object ранее имел объект адреса, этот объект остается в базе данных, несмотря на то, что он потерян. Какой самый простой способ настроить все так, чтобы моя потерянная адресная сущность была удалена из базы данных?

1 ответ

Просто обновите вашу модель, как показано ниже

class MyObject < ActiveRecord::Base
  belongs_to :address, :autosave => true


class Address < ActiveRecord::Base
  has_one :my_object, dependent: :destroy
Другие вопросы по тегам