Hola a todos, bueno, soy nuevo en esto de ruby, sucede que con unos
amigos venimos trabajando en un sistema, dado que eramos nuevos en
rails, no usabamos el scafold, pues no sabiamos como, sin embargo en el
mantenimiento de mis usuarios de sistema, decidi usar las bondades de
automatizacion que brinda rails, y estoy perdido, para empezar tengo una
vista, con un form como el que sigue:
<%form_tag (:action=> "insert") do%> </th>
<tr>
<td colspan="2"><div align="center" class="Estilo9">Administracion
de Usuarios del Sistema </div></td>
<td> </td>
</tr>
<tr>
<td> </td>
<td width="24%"><span class="Estilo7 Estilo3"><strong>Nombre del
Usuario : </strong></span></td>
<td width="27%"><span class="Estilo3"><span class="Estilo22">
<%= text_field "formUser", "usuario", :id =>"usuario", :style =>
"background-color:#fafad2",:size => 30%></span> </span></td>
<td> </td>
</tr>
<tr>
<td> </td>
<td><span class="Estilo7
Estilo3"><strong>Contrasena:</strong></span></td>
<td><span class="Estilo3"><span class="Estilo22"><%= text_field
"formUser", "contrasena", :id =>"contrasena", :style =>
"background-color:#fafad2",:size => 30%></span></span></td>
<td> </td>
</tr>
<tr>
<td> </td>
<td><span class="Estilo8">Codigo: </span></td>
<td><span class="Estilo22"><%= text_field "formUser", "codigo", :id
=>"codigo", :style => "background-color:#fafad2",:size => 30
%></span></td>
<td> </td>
</tr>
<tr>
<td> </td>
<td><span class="Estilo7 Estilo3"><strong>Rol: </strong></span></td>
<td><span class="Estilo3"><%= select_tag
"ccodrol",options_for_select(@polroles)%></span></td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td align="RIGHT"><%= submit_tag " Grabar " %></td>
<td> <%= submit_tag " Cancelar " %></td>
<td> <%end %>
ES la idea basica del form que me llama a mi funcion controladora insert
el punto es que en el insert, no se como almacenar los dato en la base,
siempre me vota error:
esa es mi funcion insert
def insert
@polroles = recupera_roles
@operacion = 'Nuevo'
@var = params[:msj]
flash[:message] = params[:msj]
if request.post?
case params[:commit]
when " Grabar "
save()
when " Cancelar "
@var = 'PROCESO CANCELADO'
flash[:message] = @var
end
end
render :layout => 'vistaadminmto'
end
Esa es mi funcion save
def save
@user = User.new
if (create)
@mensaje = "Articulo Grabado Con Exito"
else
@mensaje = "Articulo Grabado Sin Exito"
end
redirect_to :action => 'insert', :msj => @mensaje.upcase
end
Y bueno, mi funcion Create q no funciona es esta
def create
if (@user.create(:username => params[:formUser][:usuario],
:hashed_password => params[:formUser][:usuario],
:ccodtra => params[:formUser][:codigo],
:ccodrol => params[:ccodrol]))
return true;
end
return false
end
Espero alguien me pueda ayudar, se que el codigo es desordenado, y q no
es lo optimo pero al menos me gustaria que funcione. Gracias de Antemano
on 2009-06-30 03:22
on 2009-06-30 09:41
Lee unos cuantos de estos [1]. Lo han explicado muy bien. Al menos las cosas básicas, que es lo que estas preguntando aquÃ. [1] http://guides.rubyonrails.org/ El 30 de junio de 2009 03:22, Edwin Martinez < ruby-forum-incoming@andreas-s.net> escribió:
on 2009-06-30 10:59
2009/6/30 Edwin Martinez <ruby-forum-incoming@andreas-s.net> > Hola a todos, bueno, soy nuevo en esto de ruby, sucede que con unos > amigos venimos trabajando en un sistema, dado que eramos nuevos en > rails, no usabamos el scafold, pues no sabiamos como, sin embargo en el > mantenimiento de mis usuarios de sistema, decidi usar las bondades de > automatizacion que brinda rails, y estoy perdido, para empezar tengo una > vista, con un form como el que sigue: > <http://lists.simplelogica.net/mailman/listinfo/ror-es> Hola Edwin, por favor, por tu propio bien, consigue una buena fuente de información (bien online o bien alguno de los libros publicados) para dar tus primeros pasos en Rails. Te será de mucha ayuda a la hora de comprender los aspectos más básicos del desarrollo. Por ejemplo, el recurso que te da Andrés está enlazado desde la misma página de Rails, asà que podrÃas ya haberlo encontrado por ti mismo. Un saludo
on 2009-07-07 05:47
En efecto, tienen razon, estoy mas informado del tema ahora, he hecho varias aplicaciones de prueba, y ya entiendo mas el funcionamiento de los helper, y las cosas basicas de las aplicaciones CRUD, sin embargo hay algo que aun no entiendo. Cuando creo un objeto en base al modelo, con la funcion NEW, me doy cuenta que no me jala el atributo correspondiente a la primary key, entonces, cuando lo grabo con la funcion SAVE, no lo hace porque me indica que en la base de datos no se puede obviamente omitir la primary key, como puedo corregir este problema? Gracias
on 2009-07-07 19:03
Chango Martinez wrote: > > En efecto, tienen razon, estoy mas informado del tema ahora, he hecho > varias aplicaciones de prueba, y ya entiendo mas el funcionamiento de > los helper, y las cosas basicas de las aplicaciones CRUD, sin embargo > hay algo que aun no entiendo. > > Cuando creo un objeto en base al modelo, con la funcion NEW, me doy > cuenta que no me jala el atributo correspondiente a la primary key, > entonces, cuando lo grabo con la funcion SAVE, no lo hace porque me > indica que en la base de datos no se puede obviamente omitir la primary > key, como puedo corregir este problema? > > Gracias No se si te refieres a que algun campo no te se rellena cuando haces el new y por eso te da error al salvar. Cuando haces el new puedes ir rellenando todos los valores del registro: registro= Nombre_tabla.new(:campo1 => 'hola', :campo2=>'que', :campo3=>'tal).save Asà ya creas un registro en la nueva tabla y lo guardas. Recuerda que puedes actualizar el registro con las funciones update_attribute y update_attributes. s2
on 2009-07-08 05:08
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?. Jose vicente Ribera pellicer wrote: > Chango Martinez wrote: >> >> En efecto, tienen razon, estoy mas informado del tema ahora, he hecho >> varias aplicaciones de prueba, y ya entiendo mas el funcionamiento de >> los helper, y las cosas basicas de las aplicaciones CRUD, sin embargo >> hay algo que aun no entiendo. >> >> Cuando creo un objeto en base al modelo, con la funcion NEW, me doy >> cuenta que no me jala el atributo correspondiente a la primary key, >> entonces, cuando lo grabo con la funcion SAVE, no lo hace porque me >> indica que en la base de datos no se puede obviamente omitir la primary >> key, como puedo corregir este problema? >> >> Gracias > > No se si te refieres a que algun campo no te se rellena cuando haces el > new y por eso te da error al salvar. > Cuando haces el new puedes ir rellenando todos los valores del registro: > > registro= Nombre_tabla.new(:campo1 => 'hola', :campo2=>'que', > :campo3=>'tal).save > > Asà ya creas un registro en la nueva tabla y lo guardas. > Recuerda que puedes actualizar el registro con las funciones > update_attribute y update_attributes. > > s2
on 2009-07-08 13:17
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.
on 2009-07-15 08:25
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.
on 2009-07-16 06:37
Bueno, solo con el objetivo de ayudar a alguien que pase por el mismo problema, para un novato como yo para ser exactos :P, sucede que rails crea por convencion todos los primary_key de las tablas con ese nombre id, si se quiere modificar el nombre se tiene que especificar en el modelo, en mi caso seria algo como esto: class C01mkid < ActiveRecord::Base set_primary_key "id_kid" end Bueno, eso es todo Adios.
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.