Incluir Registros en una Tabla sin ID Autoincrement


#1

Hola a todos!
Amigos tengo un problema y me he cansado de buscar por google y no
encuentro
respuesta. Le comento:
Tengo una tabla articulos la cual es de otro sistema desarrollado en PHP
por
otra gente, entonces mi sistema (obviamente desarrollado en RoR 2.1.2)
consulta los registros de una tabla llamada articulos del otro sistema
sin
problemas. Mi aplicacion realiza la consulta, paginacion del catalogo y
la
edicion de cualquier registro sin problemas. el detalle esta al momento
de
incluir, debido a que la tabla Articulos no tiene el campo id en
autoincremento mi aplicacion no me guarda ningun registro :s
incluso hago la instruccion create a mano, es decir:
Articulo.create(:id => params[:articulo][:id], :descripcion => =>
params[:articulo][descripcion])
al momento de guardar el sistema da un error diciendo que se viola la
restriccion de NOT NULL en el campo id de la tabla Articulos
“insert into articulos (descripcion) values (‘Camisa para mujer’)”
Por lo que veo Rails me quita o ignora el campo id que le estoy pasando
por
parametro en el create

Entonces como hago?
alguien que me de una luz no encuentro la solucion… porque no puedo
poner
el campo en la BD autoincremento porque entonces daño el otro sistema
echo
en PHP ademas que esa tabla ya tiene mas de 80.000 articulos registrados
cuyos ID ya estan relacionados con otros registros y postgres no me deja
cambiar el campo de la tabla


#2

Entiendo que el problema está en que la tabla es atacada por una
aplicación
en PHP y otro en Ruby on Rails, la PHP se las ingenia como sea para ir
metiendo datos y gestionando esa ID.
Así que tu deberías hacer algo parecido en Ruby, investiga un poco como
PHP
asigna esas IDs a los nuevos artículos.
Si no hay huecos en la Base de datos (todas las ID’s están usadas y
nunca
una será eliminada) puedes hacer un COUNT y sumarle uno para saber cual
tiene que ser la nueva ID. Si no es así no puedo decir más.

Saludos

2009/5/23 Manuel P. removed_email_address@domain.invalid


#3

hola guillermo gracias por responder…
mira hice la prueba que me dijiste.
Despues de a.save coloque un flash[:notice] = “Articulo incluido
satisfactoriamente”
me sale el mensaje y todo el sistema no me genera error pero cuando
reviso
en la base de datos el articulo no se incluyó… no entiendo quede en el
aire

El 24 de mayo de 2009 16:38, Guillermo removed_email_address@domain.invalid
escribió:


#4

No sé si te he terminado de entender.
Quieres importar una BD de una aplicación que usaba PHP a una que
trabaje
con Rails. El modelo Articulo en Rails tiene el campo ID pero no es
autoincremental y no sabes como asignarle el valor “legacy” que viene de
la
otra BD, verdad? Confírmame que es la historia, tal vez te puede pasar
algo
para solucionar ese asunto.

  • Juan

2009/5/23 show gmail removed_email_address@domain.invalid


#5

2009/5/23 Manuel P. removed_email_address@domain.invalid

Articulo.create(:id => params[:articulo][:id], :descripcion => =>
params[:articulo][descripcion])

Si no me equivoco, id es un atributo protegido, por lo que no toma valor
en
una asignación masiva.
¿Has probado algo así?

a = Articulo.new(:descripcion => params[:articulo][descripcion])
a.id = params[:articulo][:id]
a.save


Guillermo Álvarez

Sent from Madrid, Spain


#6

no mentira guillermo ya lo consegui si se incluyo el registro gracias
hermano excelente tu solucion

El 25 de mayo de 2009 16:38, Manuel P.
removed_email_address@domain.invalidescribió:


#7

a = Articulo.new(:descripcion => params[:articulo][descripcion])
a.id = params[:articulo][:id]
a.save

saludos…


Manuel P. wrote:

Hola a todos!
Amigos tengo un problema y me he cansado de buscar por google y no
encuentro
respuesta. Le comento:
Tengo una tabla articulos la cual es de otro sistema desarrollado en PHP
por
otra gente, entonces mi sistema (obviamente desarrollado en RoR 2.1.2)
consulta los registros de una tabla llamada articulos del otro sistema
sin
problemas. Mi aplicacion realiza la consulta, paginacion del catalogo y
la
edicion de cualquier registro sin problemas. el detalle esta al momento
de
incluir, debido a que la tabla Articulos no tiene el campo id en
autoincremento mi aplicacion no me guarda ningun registro :s
incluso hago la instruccion create a mano, es decir:
Articulo.create(:id => params[:articulo][:id], :descripcion => =>
params[:articulo][descripcion])
al momento de guardar el sistema da un error diciendo que se viola la
restriccion de NOT NULL en el campo id de la tabla Articulos
“insert into articulos (descripcion) values (‘Camisa para mujer’)”
Por lo que veo Rails me quita o ignora el campo id que le estoy pasando
por
parametro en el create

Entonces como hago?
alguien que me de una luz no encuentro la solucion… porque no puedo
poner
el campo en la BD autoincremento porque entonces daño el otro sistema
echo
en PHP ademas que esa tabla ya tiene mas de 80.000 articulos registrados
cuyos ID ya estan relacionados con otros registros y postgres no me deja
cambiar el campo de la tabla