Как автоматически удалить осиротевшую сущность в моем приложении 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