(no subject)

Tengo dos modelos Descargas y Publicacion. Aparte tengo un modelo User
para registrar los logoneos en la pagina y las descargas realizadas.

En el fichero new.html.erb tengo el siguiente código que me genera una
lista desplegable con todas las publicaciones existentes, para
seleccionar.

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

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

En el método create del fichero descargas_controller.rb tengo el
siguiente código:

def create

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

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

@descarga.publicacion_id = @publicacion



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

Al entrar en http://localhost.3000/descargas/new

ActiveRecord::AssociationTypeMismatch in DescargasController#create

Publicacion(#38299390) expected, got String(#21132310)

Veo que estoy obteniendo un String, y esté esperando otra cosa, pero no
veo el error.

Perdón, si es muy evidente, pero estoy empezando con esto de RoR, y los
comienzos siempre son difíciles.

Saludos y gracias…

Fernando González Macías

fgonzalez @ grupojoly.com

prueba tratando en vez [email protected]_id = @publicacion

poner
@descarga.publicacion = @publicacion ( esto suponiendo que en tu modelo
Descarga tienes belongs_to :publicacion o algo similar
o tambien
@descarga.publicacion_id = @publicacion.id

porque como lo pones se supone que @publicacion deberia tomar el id y
ponertelo aunque no se bien que reglas siga porque en algunos metodos si
funciona por ejemplo un redirect_to :action => :show, :id => @descarga
pero
en otros no y mejor poner @descarga.id

El 6 de octubre de 2008 11:15, Fernando González Macías <
[email protected]> escribió:

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

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

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

Ese codigo es sospechoso. Lo normal seria que en #new instanciaras
@descarga y usaras los helpers normales para formularios. El campo no
debe llamarse “descarga[publicacion]” sino “descarga[publicacion_id]”,
y los helpers generan ese nombre automaticamente, asi como seleccionar
el asignado si no es nil.

Con el nombre actual, al usar mass-assignment estas invocando al
setter #publicacion= que espera un objeto de tipo Publicacion en lugar
de una cadena con el identificador dentro. De ahi el error.

mm luego me confundo con las relaciones pero que no es belongs to en
Descarga ?corrijanme si me equivoco porfas

http://api.rubyonrails.com/classes/ActiveRecord/Associations/ClassMethods.html
revisa la parte de “Is it a belongs_to or has_one association?”

class Descarga < ActiveRecord::Base

belongs_to :publicacion

end
El 6 de octubre de 2008 12:08, Fernando González Macías <
[email protected]> escribió:

He probado ambas opciones y me sigue saliendo lo mismo. Os pongo las
relaciones por si os diera alguna pista.

Tengo que seguir mirando

class Descarga < ActiveRecord::Base

has_one :publicacion

end

class Publicacion < ActiveRecord::Base

has_many :descargas

end

Saludos

Fernando González Macías

fgonzalez @ grupojoly.com


De: [email protected]
[mailto:[email protected]] En nombre de Omar J.
Enviado el: lunes, 06 de octubre de 2008 18:24
Para: La lista sobre Ruby On Rails (rubyonrails.com) en castellano
Asunto: Re: [Ror-es] (no subject)

prueba tratando en vez de

@descarga.publicacion_id = @publicacion

poner

@descarga.publicacion = @publicacion ( esto suponiendo que en tu modelo
Descarga tienes belongs_to :publicacion o algo similar

o tambien

@descarga.publicacion_id = @publicacion.id

porque como lo pones se supone que @publicacion deberia tomar el id y
ponertelo aunque no se bien que reglas siga porque en algunos metodos si
funciona por ejemplo un redirect_to :action => :show, :id => @descarga
pero en otros no y mejor poner @descarga.id

El 6 de octubre de 2008 11:15, Fernando González Macías
[email protected] escribió:

Tengo dos modelos Descargas y Publicacion. Aparte tengo un modelo User
para registrar los logoneos en la pagina y las descargas realizadas.

En el fichero new.html.erb tengo el siguiente código que me genera una
lista desplegable con todas las publicaciones existentes, para
seleccionar.

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

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

En el método create del fichero descargas_controller.rb tengo el
siguiente código:

def create

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

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

@descarga.publicacion_id = @publicacion



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

Al entrar en http://localhost.3000/descargas/new

ActiveRecord::AssociationTypeMismatch in DescargasController#create

Publicacion(#38299390) expected, got String(#21132310)

Veo que estoy obteniendo un String, y esté esperando otra cosa, pero no
veo el error.

Perdón, si es muy evidente, pero estoy empezando con esto de RoR, y los
comienzos siempre son difíciles.

Saludos y gracias…

Fernando González Macías

fgonzalez @ grupojoly.com

Tengo un modelo de Publicaciones y un modelo que registra las descarga
de dichas publicaciones.

Tal y como viene en la documentación que me facilitas, creo que tienes
razón, y debe de ser belongs_to, ya que la estructura de mi tabla
descargas es:

Id

publicacion_id : integer

fecha: date

email_id :string

Is it a belongs_to
http://api.rubyonrails.com/classes/ActiveRecord/Associations/ClassMethods.html#M000980
or has_one
http://api.rubyonrails.com/classes/ActiveRecord/Associations/ClassMethods.html#M000979
association?

Both express a 1-1 relationship. The difference is mostly where to place
the foreign key, which goes on the table for the class declaring the
belongs_to
http://api.rubyonrails.com/classes/ActiveRecord/Associations/ClassMethods.html#M000980
relationship. Example:

class User < ActiveRecord::Base
# I reference an account.
belongs_to :account
end

class Account < ActiveRecord::Base
# One user references me.
has_one :user
end

The tables for these classes could look something like:

CREATE TABLE users (
id int(11) NOT NULL auto_increment,
account_id int(11) default NULL,
name varchar default NULL,
PRIMARY KEY (id)
)

CREATE TABLE accounts (
id int(11) NOT NULL auto_increment,
name varchar default NULL,
PRIMARY KEY (id)
)

Aún así, me sigue sin funcionar.

Saludos y gracias por el interés.

Fernando González Macías

fgonzalez @ grupojoly.com


De: [email protected]
[mailto:[email protected]] En nombre de Omar J.
Enviado el: lunes, 06 de octubre de 2008 19:22
Para: La lista sobre Ruby On Rails (rubyonrails.com) en castellano
Asunto: Re: [Ror-es] (no subject)

mm luego me confundo con las relaciones pero que no es belongs to en
Descarga ?

corrijanme si me equivoco porfas

http://api.rubyonrails.com/classes/ActiveRecord/Associations/ClassMethods.html

revisa la parte de “Is it a belongs_to or has_one association?”

class Descarga < ActiveRecord::Base

belongs_to :publicacion

end

El 6 de octubre de 2008 12:08, Fernando González Macías
[email protected] escribió:

He probado ambas opciones y me sigue saliendo lo mismo. Os pongo las
relaciones por si os diera alguna pista.

Tengo que seguir mirando

class Descarga < ActiveRecord::Base

has_one :publicacion

end

class Publicacion < ActiveRecord::Base

has_many :descargas

end

Saludos

Fernando González Macías

fgonzalez @ grupojoly.com


De: [email protected]
[mailto:[email protected]] En nombre de Omar J.
Enviado el: lunes, 06 de octubre de 2008 18:24
Para: La lista sobre Ruby On Rails (rubyonrails.com) en castellano
Asunto: Re: [Ror-es] (no subject)

prueba tratando en vez de

@descarga.publicacion_id = @publicacion

poner

@descarga.publicacion = @publicacion ( esto suponiendo que en tu modelo
Descarga tienes belongs_to :publicacion o algo similar

o tambien

@descarga.publicacion_id = @publicacion.id

porque como lo pones se supone que @publicacion deberia tomar el id y
ponertelo aunque no se bien que reglas siga porque en algunos metodos si
funciona por ejemplo un redirect_to :action => :show, :id => @descarga
pero en otros no y mejor poner @descarga.id

El 6 de octubre de 2008 11:15, Fernando González Macías
[email protected] escribió:

Tengo dos modelos Descargas y Publicacion. Aparte tengo un modelo User
para registrar los logoneos en la pagina y las descargas realizadas.

En el fichero new.html.erb tengo el siguiente código que me genera una
lista desplegable con todas las publicaciones existentes, para
seleccionar.

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

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

En el método create del fichero descargas_controller.rb tengo el
siguiente código:

def create

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

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

@descarga.publicacion_id = @publicacion



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

Al entrar en http://localhost.3000/descargas/new

ActiveRecord::AssociationTypeMismatch in DescargasController#create

Publicacion(#38299390) expected, got String(#21132310)

Veo que estoy obteniendo un String, y esté esperando otra cosa, pero no
veo el error.

Perdón, si es muy evidente, pero estoy empezando con esto de RoR, y los
comienzos siempre son difíciles.

Saludos y gracias…

Fernando González Macías

fgonzalez @ grupojoly.com


Ror-es mailing list
[email protected]

el error no a cambiado ?puedes ponernos un poco de mas info ? la linea
del
error o algo mas

El 6 de octubre de 2008 12:42, Fernando González Macías <
[email protected]> escribió:

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

Tengo un modelo de Publicaciones y un modelo que registra las descarga
de dichas publicaciones.

Hola Fernando,

aparte de rogar que se tenga más cuidado en el envío de los mails para
no
hacer cosas como empezar (y continuar) hilos sin subject, te pediría
también
que proporciones toda la información necesaria para que te puedan
ayudar. No
se puede resumir un problema con un “Aún así, me sigue sin funcionar.” y
pretender que los demás pierdan tiempo preguntándote cosas obvias como
qué
error tienes, si es distinto al anterior, trazas del log …

En cualquier caso, ¿has entendido y seguido las indicaciones de Xavier
aparte de corregir lo que te ha dicho Omar?

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.

Saludos y gracias por todo.


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

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

Tengo un modelo de Publicaciones y un modelo que registra las
descarga de dichas publicaciones.

Hola Fernando,

aparte de rogar que se tenga más cuidado en el envío de los mails para
no hacer cosas como empezar (y continuar) hilos sin subject, te pediría
también que proporciones toda la información necesaria para que te
puedan ayudar. No se puede resumir un problema con un “Aún así, me sigue
sin funcionar.” y pretender que los demás pierdan tiempo preguntándote
cosas obvias como qué error tienes, si es distinto al anterior, trazas
del log …

En cualquier caso, ¿has entendido y seguido las indicaciones de Xavier
aparte de corregir lo que te ha dicho Omar?

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

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: