mysql - tabla - no se puede agregar o actualizar una fila secundaria falla una restricción de clave externa




Cómo agregar una clave externa en la migración de rieles con un nombre de tabla diferente (2)

Debe tener un aspecto como este:

class CreatePostComments < ActiveRecord::Migration
  def change
    create_table :post_comments do |t|
     t.belongs_to :post, index: true
     t.timestamps null: false
    end
    add_foreign_key :post_comments, :my_posts, column: :post_id
  end
end 

Eche un vistazo a la documentación: http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/add_foreign_key

Utiliza la opción de column cuando la columna tiene un nombre diferente.

¿Cómo puedo asignar un nombre de tabla diferente al agregar una clave externa? por ejemplo

Tengo un modelo como

class MyPost < ActiveRecord::Base
  has_many :comments, class_name: PostComment
end

class PostComment < ActiveRecord::Base
  belongs_to :post, class_name: MyPost
end

Ahora quiero cambiar mi archivo de migración de esta manera:

class CreatePostComments < ActiveRecord::Migration
  def change
    create_table :post_comments do |t|
     t.belongs_to :post, index: true
     t.timestamps null: false
    end
    add_foreign_key :post, :class_name => MyPost
  end
end 

Pero no está funcionando. La migración está siendo cancelada. ¿Cómo cambio mi archivo de migración para que funcione con la estructura de mi modelo?


Prueba esto

class CreatePostComments < ActiveRecord::Migration
  def change
    create_table :post_comments do |t|
      t.references :my_post, index: true
      t.timestamps null: false
    end
    add_foreign_key :my_post, :post_comments
  end
end




rails-migrations