如何在我的Rails应用程序中自动删除孤立实体?

时间:2016-07-27 13:42:40

标签: ruby-on-rails-4 entity orphan

我正在使用Rails 4.2.7。当我不再有指向它的对象时,有没有办法自动删除孤立的实体?我有这两个模型......

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


class Address < ActiveRecord::Base
  has_one :my_object

在我的PostGres“my_objects”表中,我有一个“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 个答案:

答案 0 :(得分:0)

只需更新您的模型

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


class Address < ActiveRecord::Base
  has_one :my_object, dependent: :destroy