У меня есть две модели, 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
Вместо отношений 'has_many', должны ли они быть' has_and_belongs_to_many'? – Ryan
Да, похоже, что 'has_and_belongs_to_many' будет намного лучше. –