1

У меня есть две модели, LaserSheet и Item, которые относятся друг к другу с has_many отношений:Как удалить объект Active Record с помощью внешнего ключа без использования каскадных удалений?

class LaserSheet < ActiveRecord::Base 
    belongs_to :job 
    has_many :items 
    ... 
end 

class Item < ActiveRecord::Base 
    belongs_to :job 
    has_many :laser_sheets 
    ... 
end 

Потому что у них есть много-ко-многим, я хочу, чтобы иметь возможность удалить Item без удаления связанный с ним LaserSheets, и аналогичным образом удалите LaserSheet без удаления связанных с ним Items. Однако, при попытке удалить один из объектов, я получаю ошибки внешнего ключа:

ERROR: update or delete on table "items" violates foreign key constraint "fk_rails_f7f551ebf9" on table "laser_sheets" DETAIL: Key (id)=(293) is still referenced from table "laser_sheets". 

EDIT:

DB миграции добавляющих реф между двумя моделями:

class AddItemRefToLaserSheets < ActiveRecord::Migration 
    def change 
    add_reference :laser_sheets, :item 
    end 
end 

class AddLaserSheetRefToItems < ActiveRecord::Migration 
    def change 
    add_reference :items, :laser_sheet 
    end 
end 
+1

Вместо отношений 'has_many', должны ли они быть' has_and_belongs_to_many'? – Ryan

+1

Да, похоже, что 'has_and_belongs_to_many' будет намного лучше. –

ответ

2

Проверить из dependent options. Вы можете хотеть что-то вроде:

class LaserSheet < ActiveRecord::Base 
    has_many :items, dependent: :nullify 
    ... 

class Item < ActiveRecord::Base 
    has_many :laser_sheets, dependent: :nullify 
    ...