61 votos

add_column referencias (Rieles)

Tengo el siguiente Rieles de la migración que funciona a la perfección (irrelevante borrado de partes):

create_table :comments do |t|
  t.text :body
  t.references :post
end

Ahora me gustaría añadir un author columna a mi comments tabla (que es el nombre de usuario de un usuario), pero no tengo idea de cómo hacerlo (estoy tentado a escribir el MySql sintaxis específica utilizando un execute).

He estado mirando add_column aquí que no menciona el references. De hecho, he encontrado TableDefinition#referencias pero no tengo idea de cómo usarlo con un add_column declaración.

Es esto posible? También es verdad que, para MySql, el "referencias" funcionalidad en realidad no establecer relaciones entre las tablas?

112voto

Jaime Bellmyer Puntos 13815

Aunque es demasiado tarde para conseguir puntos fuera de esto, yo pensé que había puesto la mejor manera para la posteridad :)

uso change_table en lugar de create_table agregar columnas a una tabla que ya existe, con todos los TableDefinition bondad:

self.up do
  change_table :comments do |t|
    t.references :author
  end
end

Esto puede parecer trivial, pero otras joyas como Idear hacer un uso intensivo de sus propios definiciones de la tabla, y de esta manera se pueden usar.

81voto

add_reference :table_name, :reference, index: true

36voto

Finalmente lo consiguió

add_column :locations, :state_id , :integer ,:references=>"states"

21voto

Milan Novota Puntos 10892

En primer lugar, hacer:

script/generate migration AddAuthorIdToComments

Abrir el archivo generado y añadir esta línea:

add_column :comments, :author_id, :integer

A continuación, en su modelo de los archivos:

class User < ActiveRecord::Base
  has_many :comments, :foreign_key => "author_id"
end

class Comment
  belongs_to :author, :class_name => User
end

2voto

Craig Stuntz Puntos 95965

Ha sido un tiempo desde que he visto esta, pero la última vez que revisé las migraciones no se admite la creación de claves foráneas. Afortunadamente, sin embargo, hay un plug-in para él. La he usado y funciona bien.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X