Cuando uso references :foo
en una migración, la columna que se genera se llama foo_id
. ¿Hay alguna diferencia entre hacer references :foo
y simplemente hacer integer :foo_id
? Tal vez algo sucede bajo el capó para hacer cumplir la relación en el nivel de la base de datos?Rieles: ¿hay alguna diferencia entre 'references: foo' y 'integer: foo_id'?
Respuesta
El resultado es el mismo para su caso específico; estás en lo correcto. Pero references
permite una opción :polymorphic => true
que creará automáticamente la columna foo_type
como una cadena en la tabla.
Semánticamente, references
es mejor si está tratando de hacer que sus migraciones reflejen mejor las relaciones entre tablas en la base de datos.
@ La respuesta de Mike explica muy bien el significado de references
. Sin embargo, a menudo es mejor no acoplar sus migraciones demasiado cerca de sus asociaciones de AR. En particular, puede acceder a todo tipo de pickle cuando se trata de implementar su aplicación si ejecuta migraciones antes de actualizar la aplicación desde el control de versiones, por ejemplo. No es un gran problema hasta que te muerde :-)
- 1. ¿Hay alguna diferencia entre "foo is None" y "foo == None"?
- 2. ¿Hay alguna diferencia entre [& foo] {...} captura y [foo] {...} captura si 'foo' es una variable de referencia?
- 3. ¿Hay alguna diferencia entre foo (void) y foo() en C++ o C?
- 4. ¿Hay alguna diferencia entre CPython y Python
- 5. ¿Hay alguna diferencia entre `ListView.invalidateViews()` y 'Adapter.notifyDataSetChanged()'?
- 6. ¿Hay alguna diferencia entre DataTable.Clear y DataTable.Rows.Clear?
- 7. ¿Hay alguna diferencia entre System.Windows.Clipboard y System.Windows.Forms.Clipboard?
- 8. ¿Hay alguna diferencia entre MsgBox y MessageBox.Show?
- 9. ¿Hay alguna diferencia entre log4net.Config.BasicConfigurator.Configure() y log4net.Config.XmlConfigurator.Configure()?
- 10. ¿Hay alguna diferencia entre! == y! = En PHP?
- 11. ¿Hay alguna diferencia entre SSLv3 y TLS1.0?
- 12. ¿Hay alguna diferencia entre: window.localStorage y localStorage?
- 13. ¿Hay alguna diferencia entre .NET y ASP.NET
- 14. ¿Hay alguna diferencia entre is_int() y ctype_digit()?
- 15. ¿Hay alguna diferencia entre gluLookAt() y glFrustum()?
- 16. ¿Hay alguna diferencia entre readonly y {get; }
- 17. ¿Hay alguna diferencia entre UITableViewCellAccessoryDetailDisclosureButton y UITableViewCellAccessoryDisclosureIndicator
- 18. ¿Hay alguna diferencia entre (local), '.' y localhost?
- 19. ¿Hay alguna diferencia entre "Objeto [] x" y "Objeto x []"?
- 20. Diferencia entre clase foo y clase foo (objeto) en Python
- 21. Diferencia entre foo.setVisibility (View.GONE) y parent.removeView (foo)
- 22. Diferencia entre "struct foo *" y "foo *" donde foo es una estructura?
- 23. ¿Cuál es la diferencia entre 'foo = Nothing' y 'foo is Nothing' en VB.NET?
- 24. ¿Hay alguna diferencia entre RPC e IPC?
- 25. ¿Hay alguna diferencia entre un control y un widget?
- 26. ¿Hay alguna diferencia entre int & a y int & a?
- 27. ¿Hay alguna diferencia entre un GUID y un UUID?
- 28. ¿Hay alguna diferencia entre "margin: 0 auto;" y "margin: auto;"
- 29. ¿Hay alguna diferencia entre 'imprimir' y 'eco' en PHP?
- 30. ¿Hay alguna diferencia entre comillas simples y dobles en Java?
¿estás sugiriendo que las referencias pueden ser peligrosas? ¿Puedes dar un ejemplo del tipo de pepinillo en el que podría meterme? – kdt
Normalmente, esto puede provocar problemas si sus migraciones y actualizaciones de código de modelo no están en la misma confirmación de control de versión o, por ejemplo, si cambia de opinión sobre la asociación más adelante y necesita actualizar una máquina que está demasiado atrasada tu desarrollo Por lo tanto, tendría migration1 que utiliza 'references' y, por lo tanto, determina el nombre de la clave externa de las asociaciones del modelo AR. Más tarde decide deshacer esa migración con una nueva y también eliminar la asociación de su código. Ahora, cualquier máquina cuyo esquema tenga 2 generaciones de antigüedad no puede ejecutar las migraciones porque la asociación se ha ido. – noodl
Sé que es un poco intrincado. No debería preocuparme hasta que te lastime realmente :-) – noodl