Hola a todos de nuevo:
Como me decian al principio, me enfrasque en la lectura de las guias
basicas, decidi dejar por el momento mi problema con los usuarios, y
decidi hacer otro modulo, eso si, usando todas las formas estandares
posibles, sin ir muy lejos use el scaffold, aqui creo la cabecera de un
“kid_de articulos”
ruby script/generate scaffold c01mkid cdescripcion:string nprecio:float
nprecio_real:float cestado:string cusuario_mod:integer
Me genero todo lo basico que necesitaba, despues, modifique el archivo
de migracion a mi guste, asi lo cambie:
class CreateC01mkids < ActiveRecord::Migration
def self.up
create_table :c01mkids , :primary_key => :id_kid do |t|
t.string :cdescripcion
t.column :nprecio, ‘numeric(12,2)’,:null => false
t.column :nprecio_real, ‘numeric(12,2)’,:null => false
t.column :cestado, ‘character(1)’,:null => false
t.integer :cusuario_mod
t.timestamps
end
end
def self.down
drop_table :c01mkids
end
end
Ejecute la migracion con exito, usando el rake -->
rake db:migrate:up VERSION=20090715030104
Hasta ahi todo bien, uso la base de datos en postgres y me creo una
tabla con esta descripcion
CREATE TABLE c01mkids
(
id_kid serial NOT NULL,
cdescripcion character varying(255) DEFAULT NULL::character varying,
nprecio numeric(12,2) NOT NULL,
nprecio_real numeric(12,2) NOT NULL,
cestado character(1) NOT NULL,
cusuario_mod integer,
created_at timestamp without time zone,
updated_at timestamp without time zone,
CONSTRAINT c01mkids_pkey PRIMARY KEY (id_kid)
)
WITH (OIDS=FALSE);
ALTER TABLE c01mkids OWNER TO postgres;
Algo que me llamo la atencion fue que me creo una secuencia,
para el id, lo cual me pareci perfecto. De hecho probe agregar unos
registros a la base de datos desde el pdAdmin, y todo excelente, me
autogeneraba el id_kid.
MI PROBLEMA VIENE AL TRATAR DE CREAR UN nuevo registro desde la vista
que automaticamente me genero.
me arroja el siguiente error
PGError: ERROR: null value in column “id_kid” violates not-null
constraint
: INSERT INTO “c01mkids” (“updated_at”, “id_kid”, “nprecio”,
“cusuario_mod”, “nprecio_real”, “cestado”, “cdescripcion”, “created_at”)
VALUES(‘2009-07-15 06:20:19.049000’, NULL, 23.3, 1, 21.2, E’A’, E’Kid de
navidad’, ‘2009-07-15 06:20:19.049000’)
Y efectivamente es logico, pero vuelvo al mismo problema que tenia con
los usuarios, no puedo Grabar porque no mando un id, porque me sucede
esto?, sera el gem que uso para el pstgres, por cierto el gem que uso es
ruby-postgres (que por cierto no me permite actualizar, me da un erro de
acceso), alguien me puede dar una pista, espero que si, y gracias de
antemano.
Jose vicente Ribera pellicer wrote:
Chango Martinez wrote:
Gracias por la ayuda Jose, el punto es que no puedo acceder a mi
atributo PK,
me explico, Tengo un objeto User, el cual almacena mis usuarios de
sistema, al momento de hacer User.new, me crea un objeto con los mismos
atributos a la base de datos menos el que es PK, es decir, puedo llenar
user1.username , user1.hash_password, o los que tuviese, pero no puedo
acceder a user1.id;
ahora cuando quiero grabar es decir user1.save me sale logicamente que
no se puede pues el campo PK es decir id, esta vacio.
Como puedo hacer para que al crear el objeto me incluya el atributo que
es PK en la tabla?.
Y para que necesitas entonces el campo PK? Lo digo porque cuando creas
un usuario el campo id se genera automaticamente (igual que el
created_at y el updated_at).Algo raro estas haciendo con el id, si lo
usas por algun tipo de relacion entre tablas te aconsejo que mires
alguno de los muchisimos tutoriales de relaciones entre tablas que
puedes encontrar en la web. Lo siento pero asi a primeras no se decirte
nada mas.