En Ruby on Rails, cómo agregar restricciones de clave externa en la migración?Compatibilidad con restricción de clave externa en Rails
Respuesta
AFAIK, no hay ningún soporte incorporado para eso, pero hay several plugins que lo ayudan con eso. También puede agregarlos manualmente a sus archivos de migración, solo use el método de ejecución para eso, p. (Muestra de rieles API):
class MakeJoinUnique < ActiveRecord::Migration
def self.up
execute "ALTER TABLE `pages_linked_pages` ADD UNIQUE `page_id_linked_page_id` (`page_id`,`linked_page_id`)"
end
def self.down
execute "ALTER TABLE `pages_linked_pages` DROP INDEX `page_id_linked_page_id`"
end
end
He aquí una solución basada en la joya que incluye soporte para agregar y quitar restricciones de clave externa, no falla con SQLite, y funciona correctamente con archivos schema.rb:
FYI, 'foreign' no genera claves externas en' schema.rb' cuando usa SQLite, porque SQLite no admite claves externas. – ashes999
Esta es una actualización de la gema matthuhiggins-extranjero: http://github.com/sparkfly/foreigner
Características:
- cobertura rspec, probado contra PostgreSQL 8.3.9 y MySQL 5.0.90
- soporte a la migración
- apoyo schema.rb
versiones futuras incluirán restricciones CHECK para PostgreSQL, que se necesita para implementar múltiples herencia de tabla.
Gracias. la gema extranjera no funciona bien con el método de cambio, especialmente si la tabla no se ha creado antes. Esto funciona muy bien – Sean
Bienvenida. Avísame (a través de github) si encuentras algún error. –
¿Sería suficiente con agregar lo siguiente, por ejemplo con los modelos Products
y User
?
add_index :products, :user_id
Agregar un índice sin duda ayudará con el rendimiento de la consulta, pero no hará que una base de datos haga cumplir las restricciones de clave externa. –
- 1. Diferencia entre restricción de clave externa y referencias en Rails
- 2. diferencias entre "clave externa" y "restricción de clave externa"
- 3. Restricción de clave externa MySQL - Columna entera
- 4. falso de restricción de clave externa fall
- 5. ¿Cómo eliminar un registro con una restricción de clave externa?
- 6. ¿Cómo elimino una restricción de clave externa en SQLAlchemy?
- 7. ¿Deshabilitar restricción de clave externa en una tabla?
- 8. MySQL 5.5 restricción de clave externa falla cuando existe una clave externa
- 9. Restricción de comprobación de clave externa de T-SQL
- 10. tabla MySQL añadir restricción de clave externa conduce a errores
- 11. SQL Server 2005: Restricción de clave externa anulable
- 12. gota MySQL Fuerza pasar por restricción de clave externa
- 13. Habilitar clave externa con Verificar datos existentes
- 14. Herramienta SQLite con soporte de clave externa?
- 15. Desplegable de clave externa en Scaffold Rails 3 Vistas
- 16. ¿Puede la misma columna tener clave principal y restricción de clave externa en otra columna
- 17. ¿Qué pasa con la restricción de clave externa en esta tabla
- 18. Especificar nombre de restricción de clave externa cuando se utiliza Mapa y @ElementCollection con Hibernate
- 19. Actualizando una restricción de clave externa con ON DELETE CASCADE no actualizando?
- 20. Optimización de clave externa en SQLite
- 21. Crear una tabla en los carriles y añadir restricción de clave externa
- 22. SQLAlchemy: no aplicar la restricción de clave externa en una relación
- 23. Compatibilidad con la clave foránea de Android ORMlite
- 24. ¿Cómo elimino una restricción de clave externa solo si existe en el servidor sql?
- 25. ¿La restricción de clave externa puede causar ciclos o múltiples rutas en cascada?
- 26. ¿Cómo eliminar la restricción de clave externa en el servidor sql?
- 27. NHibernate - Nombre ¿Restricción de clave primaria?
- 28. Guardar nueva clave externa con forma Django
- 29. clave externa condicional PostgreSQL
- 30. clave externa con la consulta DQL
Viejo poste, pero en caso de que alguien ve esto: un índice único no es equivalente a una restricción de clave externa, por lo que creo que este código no responde a la pregunta de la OP. – dsetton