2011-11-30 16 views
8

Estoy comenzando ahora en Rails, miré en el foro, pero no encontré nada que pudiera resolver mi problema.¿Necesita crear una clave externa al crear una tabla en Rails?

Aquí va, tengo una tabla de Categoría, y solo tiene nombre para una columna (no hay repetición en categorías) así que me gustaría que el nombre sea la clave principal, entonces tengo una tabla de Producto que tiene nombre , main_photo, description y me gustaría decir que un producto solo tiene una categoría, ¿necesito agregar una columna denominada categoría como clave externa en los productos?

Se supone que una categoría tiene muchos productos.

Luego, en los modelos de categoría, ¿cómo puedo decir que el nombre es la clave principal, y cómo puedo hacer la correspondencia entre el nombre de la clave primaria propuesta en categorías y categoría en los productos?

Respuesta

15

Las restricciones de clave externa en Active Record no se usan con mucha frecuencia, ya que la ideología detrás de Active Record dice que este tipo de lógica debería pertenecer al modelo y no a la base de datos; la base de datos es simplemente tonta: http://guides.rubyonrails.org/migrations.html#active-record-and-referential-integrity.

La forma de Rails es tener una columna de ID en todas las tablas, incluida su tabla Categorías, y en su tabla Products, tener una columna llamada Category_ID. Tenga en cuenta que los nombres de la tabla son plurales.

Luego en su modelo define las relaciones entre las entidades Producto y Categoría. Lea el artículo A Guide to Active Record Associations y responderá todas sus preguntas, especialmente las secciones 2.1, 2.2 y 3.3.

+0

Pero cuando lo hago, los rieles generan andamios Nombre de categoría: cadena, ¿no crea una columna de identificador por defecto? mi tabla tendrá entonces una identificación y una columna de nombre. –

+1

Sí, debe agregar una columna de ID a cada tabla. Pero no agregará columnas Category_ID a la tabla Products, tendrá que hacerlo manualmente. – link664

+1

Lea el enlace que publiqué en mi respuesta, todas las respuestas a sus preguntas están allí. – link664

Cuestiones relacionadas