• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
    • Questions
    • Teachers
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

745
Views
Creé una asociación en rieles en un autor (tiene_muchos) y un libro (pertenece a), ahora, al eliminar el autor (dependiente:: destruir), obtengo una excepción

2.7.2 :004 > Author.find(1).delete Author Load (0.2ms) SELECT "authors".* FROM "authors" WHERE "authors"."id" = ? LÍMITE ? [["id", 1], ["LIMIT", 1]] Autor Destroy (1.0ms) DELETE FROM "authors" WHERE "authors"."id" = ? [["id", 1]] Rastreo (última llamada más reciente): ActiveRecord::InvalidForeignKey (SQLite3::ConstraintException: restricción FOREIGN KEY falló: DELETE FROM "authors" WHERE "authors"."id" = ?)

Esta es la excepción que obtengo cuando realizo la eliminación.

Mi modelo de autor parece, también se usa anular

 class Author < ApplicationRecord has_many :books, dependent: :destroy end

El modelo de mi libro se ve así

 class Book < ApplicationRecord belongs_to :author end

Puedo destruir al autor y el registro se elimina y también destruir los libros contra esa identificación de autor, ahora solo quiero eliminar al autor y quiero que los libros permanezcan allí o se anulen, pero arroja una excepción cuando lo elimino

Esquema

 create_table 'authors', force: :cascade do |t| t.string 'name' t.integer 'age' t.datetime 'created_at', null: false t.datetime 'updated_at', null: false end create_table 'books', force: :cascade do |t| t.string 'name' t.integer 'price' t.integer 'author_id' t.datetime 'created_at', null: false t.datetime 'updated_at', null: false t.index ['author_id'], name: 'index_books_on_author_id'

ActiveRecord::InvalidForeignKey (SQLite3::ConstraintException: la restricción FOREIGN KEY falló: DELETE FROM "authors" WHERE "authors"."id" = ?)

about 3 years ago · Santiago Trujillo
1 answers
Answer question

0

Si desea poder anular author_id, debe crear una migración para eliminar la clave externa y ejecutarla:

 class RemoveAuthorForeignKeyFromBooks < ActiveRecord::Migration[6.0] def change remove_foreign_key :books, :authors end end

remove_foreign_key no funcionaba correctamente en SQLite antes de Rails 6 , por lo que es posible que necesite una solución en versiones anteriores.

 class Book < ApplicationRecord belongs_to :author, optional: true end class Author < ApplicationRecord has_many :books, dependent: :nullify end

Si no hace la opción de relación pertenece_a entonces no podrá actualizar el libro después de anular el id_autor.

about 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error