Невозможно удалить запись с помощью Object.delete (params [: id] - PullRequest
0 голосов
/ 17 января 2019

Мое действие уничтожения выдает эту ошибку:

 Failure/Error: Deal.delete(params[:id])

 ActiveRecord::InvalidForeignKey:
   PG::ForeignKeyViolation: ERROR:  update or delete on table "deals" violates foreign key constraint "fk_rails_cc6e075aca" on table "origin_airports"

Акция:

def destroy
  Deal.delete(params[:id])
  redirect_to deals_path
end

Я нашел ответы об этом (например, this ) и скорректировал свой класс Deal таким образом:

has_many :origin_airports, dependent: :destroy
has_many :origins, through: :origin_airports, source: :airport

Но я все еще получаю ту же ошибку.

PS. Ответ на пост, упомянутый выше, гласит: «Тем не менее, лучший способ обеспечить целостность данных - установить CASCADE DELETE на уровне базы данных». Я хотел бы знать, как это сделать.

Спасибо всем.

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Вы можете установить для параметра :dependent значение:

:destroy когда объект уничтожен, #destroy будет вызываться для связанных с ним объектов.

:delete при уничтожении объекта все связанные с ним объекты будут удалены непосредственно из базы данных без вызова их метода #destroy.

В соответствии с вашими настройками, вы должны сделать deal.destroy, а не deal.delete.

Вы также можете попробовать (миграция):

def change
  remove_foreign_key "model1", "model2"
  add_foreign_key "model1", "mnodel2", on_delete: :cascade
end

Данные не теряются, поскольку они являются только индексами.

0 голосов
/ 17 января 2019

Вы должны извлечь объект и затем вызвать destroy для него вместо использования метода класса delete(id)

Так попробуйте это:

deal = Deal.find(params[:id])
deal.destroy
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...