usar tutorial rails que español ejemplos descargar curso como ruby-on-rails ruby postgresql primary-key database-migration

ruby-on-rails - que - ruby on rails tutorial español



Problemas al configurar una clave principal personalizada en una migración de Rails 4 (3)

Uso postgresql 9.3, Ruby 2.0, Rails 4.0.0.

Después de leer numerosas preguntas sobre SO con respecto a la configuración de la clave principal en una tabla, generé y agregué la siguiente migración:

class CreateShareholders < ActiveRecord::Migration def change create_table :shareholders, { id: false, primary_key: :uid } do |t| t.integer :uid, limit: 8 t.string :name t.integer :shares t.timestamps end end end

También agregué self.primary_key = "uid" a mi modelo.

La migración se ejecuta con éxito, pero cuando me conecto a la base de datos con pgAdmin III veo que la columna uid no está configurada como clave principal. ¿Qué me estoy perdiendo?


En mi entorno (activerecord 3.2.19 y postgres 9.3.1),

:id => true, :primary_key => "columname"

crea una clave primaria con éxito, pero en lugar de especificar ": limit => 8" el tipo de columna es int4!

create_table :m_check_pattern, :primary_key => "checkpatternid" do |t| t.integer :checkpatternid, :limit => 8, :null => false end

Perdón por la información incompleta.


He creado migraciones como esta:

class CreateShareholders < ActiveRecord::Migration def change create_table :shareholders, id: false do |t| t.integer :uid, primary_key: true t.string :name t.integer :shares t.timestamps end end end


Eche un vistazo a esta respuesta . Intente execute "ALTER TABLE shareholders ADD PRIMARY KEY (uid);" sin especificar el parámetro primary_key en el bloque create_table.

Te sugiero que escribas tu migración de esta manera (para que puedas retroceder normalmente):

class CreateShareholders < ActiveRecord::Migration def up create_table :shareholders, id: false do |t| t.integer :uid, limit: 8 t.string :name t.integer :shares t.timestamps end execute "ALTER TABLE shareholders ADD PRIMARY KEY (uid);" end def down drop_table :shareholders end end

UPD: Hay una forma natural (se encuentra aquí ), pero solo con el tipo int4:

class CreateShareholders < ActiveRecord::Migration def change create_table :shareholders, id: false do |t| t.primary_key :uid t.string :name t.integer :shares t.timestamps end end end