Ror-es: Problemas con listas desplegables

Efectivamente, pude encontrar a través del histórico en la web el correo
de de Xavier y se solucionó el problema, de TypeMismatch, obteniendo
otro a continuación:

ActiveRecord::RecordNotFound in DescargasController#create

Couldn’t find Publicacion without an ID

En principio el error es claro, no le estoy pasando ningún id a esta
línea.
@publicacion = Publicacion.find(params[:id])

Evidentemente me falta base para encontrar el fallo. Me gustaría saber
en params[:id], en concreto [:id], de que estamos hablando -¿del campo
que pasamos como
referencia-?.¿De donde coge este valor?¿Del formulario de Descarga?.
También he visto en otros ejemplos similares al que quiero realizar lo
siguiente:
@publicacion = Publicacion.find(params[:publicacion]).
Lo he probado y tampoco me ha funcionado.

En http://pastebin.com/m358d66b3 y http://pastebin.com/m5125d1b4 he
dejado el código del controlador y de la vista.
Creedme que he buscado bastante y he probado un montón de cosas, pero no
doy con la tecla.

Respecto a lo de la conveniencia de crear otra lista newbie, creo que
tienes razón.

Saludos y gracias por la ayuda.


De: [email protected] en nombre de Manuel González
Noriega
Enviado el: mar 10/7/2008 10:30
Para: La lista sobre Ruby On Rails (rubyonrails.com) en castellano
Asunto: Re: [Ror-es] (no subject)

2008/10/7 Fernando González Macías [email protected]

Hola Manuel.

Ante todo, pedir disculpas por la forma inapropiada de enviar los 

correos. Intentaré la próxima vez tener más cuidado.

Respecto a lo que preguntas, he corregido lo que me ha dicho Omar,
pero de Xavier no he recibido ningún correo al respecto.

Por otra parte, preguntar si existiera la posibilidad de generar una
lista de correo más newbie. El nivel de muchos de vosotros es muy alto,
y creo que para personas que empiezan con RoR, “un poco intimidatorio”
;–)))))))))))

Y entiendo perfectamente que perder el tiempo, leyendo y respondiendo
a correos, cuyas soluciones a lo mejor son muy evidentes, no sea la
opción más aconsejable.

Hola Fernando,

gracias por entender mis palabras sobre los mensajes.

Respecto a la lista, la verdad es que no estoy de acuerdo :slight_smile: Me parece
tremendamente newbie-friendly. Se suelen contestar todo tipo de emails,
sin importar el nivel de la cuestión. El tuyo, por ejemplo, ha tenido
varias respuestas de Omar y de Xavier, señalándote los problemas con tu
código y ayudándote a resolverlos. Te invito a que eches un vistazo a
los archivos y veas que esto es la regla y no la excepción, y que
compruebes que, de hecho, los usuarios más expertos y con más nivel son
los que más participan y responden a casi todos los hilos.

El número de trolls en la lista está perfectamente controlado y
establecido en uno, que soy yo, y mi monomanía se reduce a que se trate
con el máximo respeto a los integrantes de la lista, y especialmente que
los que preguntan (toman), respeten exquisitamente a los que responden
(dan). De ahí mi persecución implacable a los que no ponen nada de su
parte, no investigan, buscan en Google, explican los problemas con
claridad, etc. y en general no ayudan a que se les ayude.

Otra regla secundaria, relacionada mucho con la anterior, es no llenar
la lista de ruido preguntando cosas que salen en cualquier artículo
introductorio (“cómo se instala Rails”, “cómo se relacionan dos
modelos”, “cómo se hace un select con Active Record” …). Una cosa es
ayudar al novato y otra sería ayudar al que tiene la manía de saltarse
la mínima formación requerida y pretende sustituir dos horas de leer un
artículo por una tutoría interactiva gratis.

Me tendrías que explicar qué esperas exactamente de una lista “newbie”,
y a ser posible poniendo ejemplos de qué te esperas de esa lista que no
te dé esta.

Ah, y revisa tu correo, que sí hay una respuesta de Xavier que soluciona
tu problema :slight_smile:

2008/10/8 Fernando González Macías [email protected]:

En principio el error es claro, no le estoy pasando ningún id a esta línea.

@publicacion = Publicacion.find(params[:id])

En un #create por convenio estas creando un modelo, carece de sentido
buscarlo en base de datos.

En un #create por tanto se hacen cosas del estilo

@publicacion = Publicacion.new(params[:publicacion])
@report = @current_user.reports.build(params[:report])

etc.

Hola Xavier.

Si te fijas el controlador es Descargas. En el modelo de Descargas tengo
un campo que referencia a publicación. Esta publicación la selecciono de una
lista desplegable, y lo que quiero es guardar el registro con el id de
Publicación en el modelo de Descargas.

No sé si se hace asi, o de otra forma. Si ves el código en el enlace, creo el
objeto @descarga.

Saludos

Fernando González Macías
fgonzalez @ grupojoly.com
Dpto. Informática Diario de Cádiz
(Grupo Joly)

-----Mensaje original-----
De: [email protected]
[mailto:[email protected]] En nombre de Xavier N.
Enviado el: miércoles, 08 de octubre de 2008 10:27
Para: La lista sobre Ruby On Rails (rubyonrails.com) en castellano
Asunto: Re: [Ror-es] Ror-es: Problemas con listas desplegables

2008/10/8 Fernando González Macías [email protected]:

En principio el error es claro, no le estoy pasando ningún id a esta línea.

@publicacion = Publicacion.find(params[:id])

En un #create por convenio estas creando un modelo, carece de sentido
buscarlo en base de datos.

En un #create por tanto se hacen cosas del estilo

@publicacion = Publicacion.new(params[:publicacion])
@report = @current_user.reports.build(params[:report])

etc.


Ror-es mailing list
[email protected]

Fernando González Macías
escribió:> Hola Xavier.

Si te fijas el controlador es Descargas. En el modelo de Descargas tengo un campo que referencia a publicación. Esta publicación la selecciono de una lista desplegable, y lo que quiero es guardar el registro con el id de Publicación en el modelo de Descargas.

No sé si se hace asi, o de otra forma. Si ves el código en el enlace, creo el objeto @descarga.

En el controller en el create la linea:

@publicacion = Publicacion.find(params[:publicacion])

tal vez sea

@publicacion = Publicacion.find(params[:descarga][:publicacion_id])

Saludos

Un saludo y suerte.

2008/10/8 cartuchoGL [email protected]:

Si te fijas el controlador es Descargas. En el modelo de Descargas tengo un campo que referencia a publicación. Esta publicación la selecciono de una lista desplegable, y lo que quiero es guardar el registro con el id de Publicación en el modelo de Descargas.

No sé si se hace asi, o de otra forma. Si ves el código en el enlace, creo el objeto @descarga.

Ah tienes razon, en el mass-assignment

@descarga = Descarga.new(params[:descarga])

se hace ya la asignacion directamente si el parametro se llama de
forma estandard como comentamos. No es necesario que instancies
@publicacion para esto.

A veces una asignacion asi no se puede hacer tan a la brava, los
campos *_id con frecuencia los marca uno protected y controla su
asignacion explicitamente por seguridad, pero eso depende del caso.

Me pierdo un poco, Xavier.

Comentada la línea de
@publicación.
Yo tengo en el create del controlador lo siguiente:

def create

@descarga = Descarga.new(params[:descarga])
#@publicacion = Publicacion.find(params[:id])

@descarga.publicacion_id = @publicacion.id
#@descarga.user_id = @user.id

  respond_to do |format|
  if @descarga.save
    flash[:notice] = 'El registro se guardó correctamente.'
    format.html { redirect_to(@descarga) }
    format.xml  { render :xml => @descarga, :status => :created, 

:location => @descarga }
else
format.html { render :action => “new” }
format.xml { render :xml => @descarga.errors, :status =>
:unprocessable_entity }
end
end
end

PUT /descargas/1

PUT /descargas/1.xml

¿Cómo recupero entonces, el id de la publicación, elegido en la lista
desplegable, para guardarlo en el campo correspondiente del modelo
Descarga?

Saludos

Fernando González Macías
fgonzalez @ grupojoly.com

-----Mensaje original-----
De: [email protected]
[mailto:[email protected]] En nombre de Xavier N.
Enviado el: miércoles, 08 de octubre de 2008 13:47
Para: La lista sobre Ruby On Rails (rubyonrails.com) en castellano
Asunto: Re: [Ror-es] Ror-es: Problemas con listas desplegables

2008/10/8 cartuchoGL [email protected]:

Si te fijas el controlador es Descargas. En el modelo de Descargas tengo un campo que referencia a publicación. Esta publicación la selecciono de una lista desplegable, y lo que quiero es guardar el registro con el id de Publicación en el modelo de Descargas.

No sé si se hace asi, o de otra forma. Si ves el código en el enlace, creo el objeto @descarga.

Ah tienes razon, en el mass-assignment

@descarga = Descarga.new(params[:descarga])

se hace ya la asignacion directamente si el parametro se llama de
forma estandard como comentamos. No es necesario que instancies
@publicacion para esto.

A veces una asignacion asi no se puede hacer tan a la brava, los
campos *_id con frecuencia los marca uno protected y controla su
asignacion explicitamente por seguridad, pero eso depende del caso.


Ror-es mailing list
[email protected]

Muchas gracias, efectivamente, ese era el problema…

Gracias…

Fernando González Macías
fgonzalez @ grupojoly.com
Dpto. Informática Diario de Cádiz
(Grupo Joly)

-----Mensaje original-----
De: [email protected]
[mailto:[email protected]] En nombre de cartuchoGL
Enviado el: miércoles, 08 de octubre de 2008 13:20
Para: La lista sobre Ruby On Rails (rubyonrails.com) en castellano
Asunto: Re: [Ror-es] Ror-es: Problemas con listas desplegables

Fernando González Macías
escribió:> Hola Xavier.

Si te fijas el controlador es Descargas. En el modelo de Descargas tengo un campo que referencia a publicación. Esta publicación la selecciono de una lista desplegable, y lo que quiero es guardar el registro con el id de Publicación en el modelo de Descargas.

No sé si se hace asi, o de otra forma. Si ves el código en el enlace, creo el objeto @descarga.

En el controller en el create la linea:

@publicacion = Publicacion.find(params[:publicacion])

tal vez sea

@publicacion = Publicacion.find(params[:descarga][:publicacion_id])

Saludos

Un saludo y suerte.

En un #create por tanto se hacen cosas del estilo
Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es


Ror-es mailing list
[email protected]

Ya solucionado con un correo anterior, que me indicó donde estaba el fallo,
tenía que poner la línea como sigue:

@publicacion = Publicacion.find(params[:descarga][:publicacion_id]

Saludos y gracias por la paciencia… ;–)))))

Fernando González Macías
fgonzalez @ grupojoly.com

-----Mensaje original-----
De: [email protected]
[mailto:[email protected]] En nombre de Fernando
González Macías
Enviado el: miércoles, 08 de octubre de 2008 14:02
Para: La lista sobre Ruby On Rails (rubyonrails.com) en castellano
Asunto: Re: [Ror-es] Ror-es: Problemas con listas desplegables

Me pierdo un poco, Xavier.

Comentada la línea de
@publicación.
Yo tengo en el create del controlador lo siguiente:

def create

@descarga = Descarga.new(params[:descarga])
#@publicacion = Publicacion.find(params[:id])

@descarga.publicacion_id = @publicacion.id
#@descarga.user_id = @user.id

  respond_to do |format|
  if @descarga.save
    flash[:notice] = 'El registro se guardó correctamente.'
    format.html { redirect_to(@descarga) }
    format.xml  { render :xml => @descarga, :status => :created, 

:location => @descarga }
else
format.html { render :action => “new” }
format.xml { render :xml => @descarga.errors, :status =>
:unprocessable_entity }
end
end
end

PUT /descargas/1

PUT /descargas/1.xml

¿Cómo recupero entonces, el id de la publicación, elegido en la lista
desplegable, para guardarlo en el campo correspondiente del modelo
Descarga?

Saludos

Fernando González Macías
fgonzalez @ grupojoly.com

-----Mensaje original-----
De: [email protected]
[mailto:[email protected]] En nombre de Xavier N.
Enviado el: miércoles, 08 de octubre de 2008 13:47
Para: La lista sobre Ruby On Rails (rubyonrails.com) en castellano
Asunto: Re: [Ror-es] Ror-es: Problemas con listas desplegables

2008/10/8 cartuchoGL [email protected]:

Si te fijas el controlador es Descargas. En el modelo de Descargas tengo un campo que referencia a publicación. Esta publicación la selecciono de una lista desplegable, y lo que quiero es guardar el registro con el id de Publicación en el modelo de Descargas.

No sé si se hace asi, o de otra forma. Si ves el código en el enlace, creo el objeto @descarga.

Ah tienes razon, en el mass-assignment

@descarga = Descarga.new(params[:descarga])

se hace ya la asignacion directamente si el parametro se llama de
forma estandard como comentamos. No es necesario que instancies
@publicacion para esto.

A veces una asignacion asi no se puede hacer tan a la brava, los
campos *_id con frecuencia los marca uno protected y controla su
asignacion explicitamente por seguridad, pero eso depende del caso.


Ror-es mailing list
[email protected]


Ror-es mailing list
[email protected]

Xavier, lo que no entiendo, ni sé, es cuando te dices, “Si le mandas
params[:descarga][:publicacion]…”

Si mi vista es la siguiente:

Descarga de Publicaciones

<% form_for(@descarga) do |f| %>
<%= f.error_messages %>


<% @selected = @descarga.publicacion.id if @descarga.publicacion %>

<%= options_from_collection_for_select( Publicacion.find(:all), :id,
:nombre, @selected) %>

</p>

<%= f.label :fecha %>
<%= f.date_select :fecha %>

<%= f.submit "Descargar" %>

<% end %>

<%= link_to ‘Back’, descargas_path %>

¿Cómo le mando, lo que comentas, de params[:descarga][:publicacion_id]?

Gracias, por el interés en iluminar a un newbie con ganas de aprender…

Fernando González Macías
fgonzalez @ grupojoly.com

-----Mensaje original-----
De: [email protected]
[mailto:[email protected]] En nombre de Xavier N.
Enviado el: miércoles, 08 de octubre de 2008 15:38
Para: La lista sobre Ruby On Rails (rubyonrails.com) en castellano
Asunto: Re: [Ror-es] Ror-es: Problemas con listas desplegables

2008/10/8 Fernando González Macías [email protected]:

@publicacion = Publicacion.find(params[:descarga][:publicacion_id]

Si mandas params[:descarga][:publicacion_id] no has de hacer eso ni
asignar nada mas relativo a publicaciones. La publicacion queda
asignada en

@descarga = Descarga.new(params[:descarga])

porque publicacion_id es un atributo entero como cualquier otro
atributo de una descarga. A continuacion ya viene la linea del
respond_to.


Ror-es mailing list
[email protected]

2008/10/8 Fernando González Macías [email protected]:

<% @selected = @descarga.publicacion.id if @descarga.publicacion %>


¿Cómo le mando, lo que comentas, de params[:descarga][:publicacion_id]?

Ya lo estas haciendo. No estas usando un helper para generar el select
y eso tiene penalizacion :-), pero enviar lo envias.

Te falta entender como se relacionan los nombres de los campos en los
forms y el hash params. Este articulo te puede ayudar:

2008/10/8 Fernando González Macías [email protected]:

@publicacion = Publicacion.find(params[:descarga][:publicacion_id]

Si mandas params[:descarga][:publicacion_id] no has de hacer eso ni
asignar nada mas relativo a publicaciones. La publicacion queda
asignada en

@descarga = Descarga.new(params[:descarga])

porque publicacion_id es un atributo entero como cualquier otro
atributo de una descarga. A continuacion ya viene la linea del
respond_to.

Gracias por el link.

Aparte he visto este link sobre los helpers, que creo que está bien y me
va a ayudar al respecto.

Pero coemntas que no utilizo un helper en el select, pero yo creo que
estoy usando uno, el siguiente:

<%= options_from_collection_for_select( Publicacion.find(:all), :id,
:nombre, @selected) %>

Saludos

Fernando González Macías
fgonzalez @ grupojoly.com
Dpto. Informática Diario de Cádiz
(Grupo Joly)

-----Mensaje original-----
De: [email protected]
[mailto:[email protected]] En nombre de Xavier N.
Enviado el: miércoles, 08 de octubre de 2008 16:23
Para: La lista sobre Ruby On Rails (rubyonrails.com) en castellano
Asunto: Re: [Ror-es] Ror-es: Problemas con listas desplegables

2008/10/8 Fernando González Macías [email protected]:

<% @selected = @descarga.publicacion.id if @descarga.publicacion %>


¿Cómo le mando, lo que comentas, de params[:descarga][:publicacion_id]?

Ya lo estas haciendo. No estas usando un helper para generar el select
y eso tiene penalizacion :-), pero enviar lo envias.

Te falta entender como se relacionan los nombres de los campos en los
forms y el hash params. Este articulo te puede ayudar:


Ror-es mailing list
[email protected]

2008/10/8 Fernando González Macías [email protected]:

Pero coemntas que no utilizo un helper en el select, pero yo creo que estoy usando uno, el siguiente:

<%= options_from_collection_for_select( Publicacion.find(:all), :id, :nombre, @selected) %>

Pero no se genera el SELECT mismo con un helper. Has de buscar un
helper que genera todo de golpe.

En forms corrientes relacionados con los modelos una app rails
canonica no tiene tags explicitos.

Se me pasó poner el link

http://shiningthrough.co.uk/blog/show/6

Fernando González Macías
fgonzalez @ grupojoly.com
Dpto. Informática Diario de Cádiz
(Grupo Joly)

-----Mensaje original-----
De: [email protected]
[mailto:[email protected]] En nombre de Fernando
González Macías
Enviado el: miércoles, 08 de octubre de 2008 16:44
Para: La lista sobre Ruby On Rails (rubyonrails.com) en castellano
Asunto: Re: [Ror-es] Ror-es: Problemas con listas desplegables

Gracias por el link.

Aparte he visto este link sobre los helpers, que creo que está bien y me
va a ayudar al respecto.

Pero coemntas que no utilizo un helper en el select, pero yo creo que
estoy usando uno, el siguiente:

<%= options_from_collection_for_select( Publicacion.find(:all), :id,
:nombre, @selected) %>

Saludos

Fernando González Macías
fgonzalez @ grupojoly.com
Dpto. Informática Diario de Cádiz
(Grupo Joly)

-----Mensaje original-----
De: [email protected]
[mailto:[email protected]] En nombre de Xavier N.
Enviado el: miércoles, 08 de octubre de 2008 16:23
Para: La lista sobre Ruby On Rails (rubyonrails.com) en castellano
Asunto: Re: [Ror-es] Ror-es: Problemas con listas desplegables

2008/10/8 Fernando González Macías [email protected]:

<% @selected = @descarga.publicacion.id if @descarga.publicacion %>


¿Cómo le mando, lo que comentas, de params[:descarga][:publicacion_id]?

Ya lo estas haciendo. No estas usando un helper para generar el select
y eso tiene penalizacion :-), pero enviar lo envias.

Te falta entender como se relacionan los nombres de los campos en los
forms y el hash params. Este articulo te puede ayudar:


Ror-es mailing list
[email protected]


Ror-es mailing list
[email protected]