Pasar un id desde un controller a otro

Hola… muchas gracias ante todo por vuestra ayuda.

Para pasar un dato hasta ahora he hecho lo siguiente:

en el html:
<%= link_to ‘Nueva incidencia’, :controller => ‘incidencias’, :action =>
‘new’, :id => incidencia.Cliente_id%>

y en el controller:

@params[:id]

me retornaba los datos.

pero con ‘new’, no funciona ¿pq?

@incidencias.Cliente_id = @params[:id]

en teoria tendria que guardar el dato q le he pasado, pero me devuelve
un error de que Cliente_id es nulo.

El Jueves, 25 de Enero de 2007 11:08, Andres escribió:

Hola… muchas gracias ante todo por vuestra ayuda.

Para pasar un dato hasta ahora he hecho lo siguiente:

en el html:
<%= link_to ‘Nueva incidencia’, :controller => ‘incidencias’, :action =>
‘new’, :id => incidencia.Cliente_id%>

“Cliente_id” debería ir con minúscula. En Ruby, lo que empieza con
mayúsculas,
es una constante. Además, no hace falta añadir el “_id”
(incidencia.cliente
bastaría).

y en el controller:

@params[:id]

El uso de la variable de instancia @params está desaconsejado.

me retornaba los datos.

pero con ‘new’, no funciona ¿pq?

No sé exactamente a qué te refieres, pero voy a suponer algunas cosas
(corrígeme si me equivoco). En principio, tu método “new” te lleva a un
formulario para rellenar algunos datos (y se supone que le has pasado el
‘id’
del cliente). Pero si en tu formulario no pones un campo “hidden” o algo
así
con ese valor, al pulsar el botón, no lo va a mandar (es una acción
separada
de la primera).

Solución: usa un campo hidden en el formulario del new. Si este no es tu
caso,
olvida lo que he dicho.

@incidencias.Cliente_id = @params[:id]

Esto no me parece una buena idea; intento evitar siempre que puedo el
acceso
directo a los identificadores. Te aconsejo que:

  1. en lugar de pasar el parámetro “:id => incidencia.cliente_id” pasa un
    parámetro “:cliente_id => incidencia.cliente”.
  2. en el formulario “new” tendrás que poner un campo tipo “hidden” que
    se
    llame “cliente_id” y que tenga ese valor.

Y nada más. Al hacer un "Incidencia.new(params[:incidencia]) él verá que
hay
un campo “:cliente_id” y se encargará del resto.

Saludos.


Imobach González Sosa
banot.net
Correo-e: imobachgs en banot punto net

Andrés,

Cuando tu le dices new, el id lo coloca mysql (o la base de datos que
manejes) siempre que sea autoicremental, si no lo es, en el modelo debes
tener un método que lo haga.
En otras palabras, cuando es new no necesitas el id (siempre que sea
autoincremental)

def new
obj_modelo = Modelo.new()
end

def save
obj_modelo = Modelo.new(params[:modelo])
obj_modelo.save # Solo aqui asigna el id
end