Duda con asociaciones en el modelo

Hola a todos.Vereis tengo una duda, y como estoy empezando con rails no
se como resolverla. Tengo un servicio interno de mensajeria, en la que
hay un emisor y un receptor dentro de una tabla de mensajes.Dicho
receptor y emisor logicamente estaran enlazados con una tabla de
usuarios a traves del idUsuario. Es decir que para cada mensaje existira
un IdUsuarioOrigen e IdUsuarioDestino. Como puedo establecer en rail
dicha asociación. Se hacerlo solo con una unica foreign key, pero con 2
sobre la misma tabla ni idea.

Un saludo.

usuarios a traves del idUsuario. Es decir que para cada mensaje existira un IdUsuarioOrigen e IdUsuarioDestino. Como puedo establecer en rail dicha asociación. Se hacerlo solo con una unica foreign key, pero con 2sobre la misma tabla ni idea.

en la ayuda de la api te viene este ejemplo

belongs_to :author, :class_name => “Person”, :foreign_key => “author_id”

que se parece mucho a lo que quieres

en tu caso necesitarías dos belongs_to sobre tu tabla de mensajes tal
que
belongs_to :origen, :class_name => “Usuario”, :foreign_key =>
“usuario_origen_id”
belongs_to :destino, :class_name => “Usuario”, :foreign_key =>
“usuario_destino_id”

Obviamente el nombre de la clase dependerá de cómo llames a tu modelo y
el nombre de las foreign key también. Una vez hecho esto podrías hacer
sobre tu mensaje

my_mensaje.origen o my_mensaje.destino y estarías accediendo al objeto
relacionado correspodiente de la tabla de usuarios

De esta forma puedes añadir tantas relaciones como quieras sobre una
misma tabla con diferentes nombres y propiedades para cada una.

saludos,

j

Estamos de estreno… si necesitas llevar el control de tus gastos
visita http://www.gastosgem.com !!Es gratis!!

javier ramirez wrote:

usuarios a traves del idUsuario. Es decir que para cada mensaje existira un IdUsuarioOrigen e IdUsuarioDestino. Como puedo establecer en rail dicha asociación. Se hacerlo solo con una unica foreign key, pero con 2sobre la misma tabla ni idea.

en la ayuda de la api te viene este ejemplo

belongs_to :author, :class_name => “Person”, :foreign_key => “author_id”

que se parece mucho a lo que quieres

en tu caso necesitarías dos belongs_to sobre tu tabla de mensajes tal
que
belongs_to :origen, :class_name => “Usuario”, :foreign_key =>
“usuario_origen_id”
belongs_to :destino, :class_name => “Usuario”, :foreign_key =>
“usuario_destino_id”

Obviamente el nombre de la clase dependerá de cómo llames a tu modelo y
el nombre de las foreign key también. Una vez hecho esto podrías hacer
sobre tu mensaje

my_mensaje.origen o my_mensaje.destino y estarías accediendo al objeto
relacionado correspodiente de la tabla de usuarios

De esta forma puedes añadir tantas relaciones como quieras sobre una
misma tabla con diferentes nombres y propiedades para cada una.

saludos,

j

Estamos de estreno… si necesitas llevar el control de tus gastos
visita http://www.gastosgem.com !!Es gratis!!

He creado correctamente todo pero a la hora de guardar va todo perfecto,
pero no veo el id de los usuarios en la tabla de mensajes, al realizar
la consulta en mysql, aparecen a nulo.

class Mensaje < ActiveRecord::Base
validates_presence_of :proyecto_id
validates_presence_of :origen
validates_presence_of :destino
belongs_to :Proyecto
belongs_to :origen, :class_name => “Usuario”, :foreign_key =>
“usuario_origen_id”
belongs_to :destino, :class_name => “Usuario”, :foreign_key =>
“usuario_destino_id”
end

Esta es la estructura de mi modelo para mensaje.Para la asociacion de
mensajes con proyectos lo hace muy bien y realiza las actualizaciones
correctamente pero no asi con los usuarios.

que me falta?

class Mensaje < ActiveRecord::Base
validates_presence_of :proyecto_id
validates_presence_of :usuario_origen_id
validates_presence_of :usuario_destino_id
belongs_to :Proyecto
belongs_to :origen, :class_name => “Usuario”, :foreign_key =>
“usuario_origen_id”
belongs_to :destino, :class_name => “Usuario”, :foreign_key =>
“usuario_destino_id”
end

En el caso que los campos de las claves tengan ese nombre … Cualquier
cosa, postea la estructura de la tabla mensajes.
Silvio

El día 5/02/07, Carlos Dominguez padron
[email protected]
escribió:

Silvio Q. wrote:

class Mensaje < ActiveRecord::Base
validates_presence_of :proyecto_id
validates_presence_of :usuario_origen_id
validates_presence_of :usuario_destino_id
belongs_to :Proyecto
belongs_to :origen, :class_name => “Usuario”, :foreign_key =>
“usuario_origen_id”
belongs_to :destino, :class_name => “Usuario”, :foreign_key =>
“usuario_destino_id”
end

En el caso que los campos de las claves tengan ese nombre … Cualquier
cosa, postea la estructura de la tabla mensajes.
Silvio

El día 5/02/07, Carlos Dominguez padron
[email protected]
escribió:

tabla mensajes…, creada con los migrate correspondientes
±—±-------±--------------------±------------±-------±--------+
| id | texto | created_at | proyecto_id | origen | destino |
±—±-------±--------------------±------------±-------±--------+

Tengo un problema que no entiendo bien.

Tengo una tabla “laptops” en la cual un campo site_id de tipo int (11)
hará referencia al “site” al que pertenece dicho “laptop”. El caso es
que si la pongo con dicha nomenclatura site_id al realizar el comando:

C:> ruby script\generate ajaxscaffold Laptops , dicho campo no lo
incluye en el formulario.

¿Esto es por alguna regla delimitada?. ¿Existe forma de cambiar dicho
comportamiento?

Fernando González Macías

[email protected]

Entonces es …

Silvio Q. wrote:
class Mensaje < ActiveRecord::Base
validates_presence_of :proyecto_id
validates_presence_of :origen
validates_presence_of :destino
belongs_to :Proyecto
belongs_to :origen, :class_name => “Usuario”, :foreign_key => “origen”
belongs_to :destino, :class_name => “Usuario”, :foreign_key =>
“destino”
end

En :foreign_key tenes que poner el nombre de campo que establece la
asociacion.
Silvio

El día 5/02/07, Carlos Dominguez padron
[email protected]
escribió:

Bueno, arriba decias que los proyectos se actualizaban bien …

De todas formas, no entiendo lo que estas diciendo bien.
Que significa “La clase usuario no tiene nada?”.
Primero deberias crear los usuarios …

Usuario.create( :nombre => ‘pepe’ ); Usuario.create( :nombre => ‘pepa’
);
Proyecto.create( :nombre => ‘xxxx’ );

Suponiendo que los id generados sean correlativos a partir del 1.

m = Mensaje.create( :texto => ‘el texto’, :origen =>1, :destino =>2,
proyecto_id => 1 );
m.origen.nombre deberia devolverte pepe.
m.destino.nombre deberia devolverte pepa.
m.proyecto.nombre deberia devolverte xxxx

Silvio

El día 5/02/07, Carlos Dominguez padron
[email protected]
escribió:

Sigo viendo los campos a nulo. He hecho los cambios, no hay que hacer
nada mas no?.

class Mensaje < ActiveRecord::Base
validates_presence_of :proyecto_id
validates_presence_of :origen
validates_presence_of :destino
belongs_to :Proyecto
belongs_to :origen, :class_name => “Usuario”, :foreign_key =>
“origen”
belongs_to :destino, :class_name => “Usuario”, :foreign_key =>
“destino”
end

la clase usuario no tiene nada y la de proyectos lo mismo. Estoy
trabajando desde la consola a traves de ruby script/console

Bueno, me ha superado … Yo veo todo bien …
Suponiendo que la segunda linea sea …

msg.destino = 2

(estas seteando dos veces la variable origen).
tiene que funcionar correctamente …

Las preguntas que me quedan es ver :
a) estas accediendo a la consola con el parametro -s? Si lo haces queda
todo
dentro de una transaccion.
b) Que pasa si luego de la ultima linea escribis …

msg2 = Mensaje.find(msg.id)

msg2 tiene todos los valores?

Silvio

El día 5/02/07, Carlos Dominguez padron
[email protected]
escribió:

Silvio Q. wrote:

Bueno, arriba decias que los proyectos se actualizaban bien …

De todas formas, no entiendo lo que estas diciendo bien.
Que significa “La clase usuario no tiene nada?”.
Primero deberias crear los usuarios …

Usuario.create( :nombre => ‘pepe’ ); Usuario.create( :nombre => ‘pepa’
);
Proyecto.create( :nombre => ‘xxxx’ );

Suponiendo que los id generados sean correlativos a partir del 1.

m = Mensaje.create( :texto => ‘el texto’, :origen =>1, :destino =>2,
proyecto_id => 1 );
m.origen.nombre deberia devolverte pepe.
m.destino.nombre deberia devolverte pepa.
m.proyecto.nombre deberia devolverte xxxx

Silvio

El día 5/02/07, Carlos Dominguez padron
[email protected]
escribió:

ya hay usuarios y proyectos en la base de datos…lo unico que he hecho
es mas o menos lo siguiente (por cierto cuando dije q las clases no
tenian nada me referia a q no he especificado nada en ellas, es decir
mis definiciones del clase son del tipo
class Usuario < ActiveRecord::Base
end)

msg = Mensaje.new
msg.texto = “prueba”
msg.origen = 1
msg.origen = 2
msg.proyecto = 1
msg.save
devuelve true es decir todo ok.

pero en sql sigo viendo a nulo los campos origen y destino

por cierto Silvio gracias por responder tan rapido…

Ahora caigo …

Al ser belongs_to el mismo nombre que el campo, estas reescribiendo el
metodo que cambia el campo.

class Mensaje < ActiveRecord::Base
validates_presence_of :proyecto_id
validates_presence_of :origen
validates_presence_of :destino
belongs_to :Proyecto
belongs_to :usuario_origen, :class_name => “Usuario”, :foreign_key =>
“origen”
belongs_to :usuario_destino, :class_name => “Usuario”, :foreign_key =>
“destino”
end

Y ahora …

msg = Mensaje.new
msg.texto = “prueba”
msg.origen = 1
msg.destino = 2
msg.proyecto_id = 1
msg.save

Y luego proba
msg.usuario_origen … Deberia devolver la una clase Usuario.

Esto pasa por no usar el estandar de ror, que es que las fk tienen que
tener
el sufijo _id.

Silvio

El día 5/02/07, Carlos Dominguez padron
[email protected]
escribió:

Gracias!!! funciona, era eso que has comentado.Seguimos con ruby para
delante y aprendiendo.

Un saludo.

He probado ha realizarlo de otra manera y sigo igual

Te explico:

msg = Mensaje.new
msg.origen = Usuario.find_by_id(1)

---- Me devuelve la informacion de un usuario con id 1 perfectamente

msg.origen = Usuario.find_by_id(2)

— Me devuelve la informacion de un usuario con id 2 perfectamente

msg.proyecto_id = 1

msg.texto = “lo que sea”

msg.save
true

Voy a SQL esta el registro creado pero los campos origen y destino estan
a nulo.
ya no se q mas intentar.todo parece correcto los campos origen y destino
no son mas que tipos enteros cuya foreign key esta en la tabla usuarios
nada mas!!!.
Algo estoy haciendo mal.Si quito todos los belongs logicamente si q me
aparecen todos los campos rellenos.

Un saludo.

En ajax scaffold no te pone las claves foráneas supongo que porque son
números que no dicen nada al usuario final.

Hasta donde yo sé, tienes que definirlas manualmente en el modelo. Yo
lo hago
así:
Imagina que la tabla tiene un id, un nombre y una clave foránea que es
cliente_id
cliente_usuario.rb:
require ‘ajax_scaffold’
class ClienteUsuario < ActiveRecord::Base
belongs_to :cliente

@scaffold_columns = [
AjaxScaffold::ScaffoldColumn.new(self, { :name => “nombre”}),
AjaxScaffold::ScaffoldColumn.new(self, { :name => “cliente_id”,
:eval => “cliente_usuario.cliente.descripcion”, :label =>
“Cliente”})
]
end

La primera columna es lo que hace por defecto.

La segunda hace que se evalúe lo que le pasas a :eval, así puedes
tener lo que tú quieras poner.

Más información:http://www.height1percent.com/articles/2006/04/18/ajaxscaffold-3-1-0-released
Mira donde pone “Handling associations from the belongs_to side of
things”

Si hay alguna otra manera de hacerlo más fácil, me encantaría saberlo.
Yo te he dado lo que he podido encontrar.

Ah y otra cosa, creo que al generar hay que poner el nombre de la
tabla en singular. Eso creo vamos.

Un saludo

Gracias Luis.

Efectivamente supongo que debe ser el comportamiento habitual en
AjaxScaffold respecto a las claves foráneas. El caso es que con el
comentario tuyo ya he conseguido mostrar la información del campo
referenciado, tanto en list, como en la edición y adicción de registros.
Es decir que obtengo el desplegable que es lo que quería.

Evidentemente en el _form.rhtml he tenido que incluir las etiquetas
correspondientes. Como sigue:

Empresa <%= select 'laptop','site_id' , Site.find_all.collect {|p| [p.nombre, p.id] } %>

El tema ahora es que en la edición no obtengo ningún problema, puedo
modificar cualquier campo, incluido el campo empresa referenciado a
través del desplegable. Sin embargo a la hora de añadir registros
nuevos, cuando voy a guardar se me queda en una especie de bucle,
continuamente con la “ruedecita dando vueltas” propia de operación en
curso.

¿Se le ocurre a alguien a que puede ser debido?. Pongo a continuación el
fuente de laptop.rb. Son dos tablas:laptops y sites. Un portátil
pertenece a un sitio(empresa).

require ‘ajax_scaffold’
class Laptop < ActiveRecord::Base

validates_presence_of :nombre

belongs_to :site, :foreign_key => “site_id”

@scaffold_columns = [
AjaxScaffold::ScaffoldColumn.new(self, { :name => “nombre”}),
AjaxScaffold::ScaffoldColumn.new(self, { :name => “site_id”,
:eval => “laptop.site.nombre”, :label => “Empresa”}),
AjaxScaffold::ScaffoldColumn.new(self, { :name => “marca”}),
AjaxScaffold::ScaffoldColumn.new(self, { :name => “modelo”}),
AjaxScaffold::ScaffoldColumn.new(self, { :name => “disco_duro”}),
AjaxScaffold::ScaffoldColumn.new(self, { :name => “ram”}),
AjaxScaffold::ScaffoldColumn.new(self, { :name => “fecha_alta”}),
AjaxScaffold::ScaffoldColumn.new(self, { :name => “umts”}),
AjaxScaffold::ScaffoldColumn.new(self, { :name => “num_movil”}),
AjaxScaffold::ScaffoldColumn.new(self, { :name => “observaciones”}),
]
end

Saludos y gracias.

Fernando González Macias
[email protected]


De: [email protected] en nombre de Luis V.
Enviado el: mar 2/6/2007 08:36
Para: La lista sobre Ruby On Rails (rubyonrails.com) en castellano
Asunto: Re: [Ror-es] Problemas con campos con nombre finalizados en _id

En ajax scaffold no te pone las claves foráneas supongo que porque son
números que no dicen nada al usuario final.

Hasta donde yo sé, tienes que definirlas manualmente en el modelo. Yo
lo hago así:

Imagina que la tabla tiene un id, un nombre y una clave foránea que es
cliente_id
cliente_usuario.rb:
require ‘ajax_scaffold’
class ClienteUsuario < ActiveRecord::Base
belongs_to :cliente

@scaffold_columns = [
AjaxScaffold::ScaffoldColumn.new(self, { :name => “nombre”}),
AjaxScaffold::ScaffoldColumn.new(self, { :name => “cliente_id”,
:eval => “cliente_usuario.cliente.descripcion”, :label =>
“Cliente”})
]
end

La primera columna es lo que hace por defecto.

La segunda hace que se evalúe lo que le pasas a :eval, así puedes
tener lo que tú quieras poner.

Más información:
http://www.height1percent.com/articles/2006/04/18/ajaxscaffold-3-1-0-released
Mira donde pone “Handling associations from the belongs_to side of
things”

Si hay alguna otra manera de hacerlo más fácil, me encantaría saberlo.
Yo te he dado lo que he podido encontrar.

Ah y otra cosa, creo que al generar hay que poner el nombre de la
tabla en singular. Eso creo vamos.

Un saludo

Mira en development.log justo cuando le des a create new. Cuando pasa lo
de
la ruedecita, y no hace na más, suele ser que ha petado en algún sitio.

Si estás desarrollando con RadRails, utiliza el comando tail en
development.log para ver el log avanzando conforme haces las acciones.

Pega el trocito de log y a ver si te podemos ayudar.

Un saludo

Hola Luis. De nuevo muchas gracias por todo tu interés. Llevo dos días
con Rails y los comienzos se hacen difíciles… ;----))))

Como comentaste en el development.log encuentro el error, pero me
faltan recursos para ser capaz de interpretarlo. No sé si el error tiene
algo que ver con el campo referenciado y la lista desplegable asociada
al mismo.

Te dejo parte del log donde se ve el error, por si se te ocurre alguna
cosa:


De: [email protected] en nombre de Luis V.
Enviado el: mar 2/6/2007 11:51
Para: La lista sobre Ruby On Rails (rubyonrails.com) en castellano
Asunto: Re: [Ror-es] Problemas con campos con nombre finalizados en _id

Mira en development.log justo cuando le des a create new. Cuando pasa lo
de la ruedecita, y no hace na más, suele ser que ha petado en algún
sitio.

Si estás desarrollando con RadRails, utiliza el comando tail en
development.log para ver el log avanzando conforme haces las acciones.

Pega el trocito de log y a ver si te podemos ayudar.

Un saludo

On 2/6/07, Fernando González Macías [email protected] wrote:

Gracias Luis.

Efectivamente supongo que debe ser el comportamiento habitual en
AjaxScaffold respecto a las claves foráneas. El caso es que con el
comentario tuyo ya he conseguido mostrar la información del campo
referenciado, tanto en list, como en la edición y adicción de registros.
Es decir que obtengo el desplegable que es lo que quería.

Evidentemente en el _form.rhtml he tenido que incluir las etiquetas
correspondientes. Como sigue:

Empresa <%= select 'laptop','site_id' , Site.find_all.collect {|p| [p.nombre, p.id] } %>

El tema ahora es que en la edición no obtengo ningún problema, puedo
modificar cualquier campo, incluido el campo empresa referenciado a
través del desplegable. Sin embargo a la hora de añadir registros
nuevos, cuando voy a guardar se me queda en una especie de bucle,
continuamente con la “ruedecita dando vueltas” propia de operación en
curso.

¿Se le ocurre a alguien a que puede ser debido?. Pongo a continuación
el fuente de laptop.rb. Son dos tablas:laptops y sites. Un portátil
pertenece a un sitio(empresa).

require ‘ajax_scaffold’
class Laptop < ActiveRecord::Base

validates_presence_of :nombre

belongs_to :site, :foreign_key => "site_id"

@scaffold_columns = [
  AjaxScaffold::ScaffoldColumn.new(self, { :name => "nombre"}),
  AjaxScaffold::ScaffoldColumn.new(self, { :name => "site_id",
  :eval => "laptop.site.nombre",  :label => "Empresa"}),
 AjaxScaffold::ScaffoldColumn.new(self, { :name => "marca"}),
 AjaxScaffold::ScaffoldColumn.new(self, { :name => "modelo"}),
 AjaxScaffold::ScaffoldColumn.new(self, { :name => "disco_duro"}),
 AjaxScaffold::ScaffoldColumn.new(self, { :name => "ram"}),
 AjaxScaffold::ScaffoldColumn.new(self, { :name => "fecha_alta"}),
 AjaxScaffold::ScaffoldColumn.new(self, { :name => "umts"}),
 AjaxScaffold::ScaffoldColumn.new(self, { :name => "num_movil"}),
 AjaxScaffold::ScaffoldColumn.new(self, { :name => 

“observaciones”}),
]
end

Saludos y gracias.

Fernando González Macias
[email protected]


De: [email protected] en nombre de Luis V.
Enviado el: mar 2/6/2007 08:36
Para: La lista sobre Ruby On Rails ( rubyonrails.com) en castellano
Asunto: Re: [Ror-es] Problemas con campos con nombre finalizados en
_id

En ajax scaffold no te pone las claves foráneas supongo que porque son
números que no dicen nada al usuario final.

Hasta donde yo sé, tienes que definirlas manualmente en el modelo. Yo
lo hago así:

Imagina que la tabla tiene un id, un nombre y una clave foránea que es
cliente_id
cliente_usuario.rb:
require ‘ajax_scaffold’
class ClienteUsuario < ActiveRecord::Base
belongs_to :cliente

@scaffold_columns = [
AjaxScaffold::ScaffoldColumn.new(self, { :name => "nombre"}),
AjaxScaffold::ScaffoldColumn.new(self, { :name => "cliente_id",
  :eval => "cliente_usuario.cliente.descripcion", :label => 

“Cliente”})
]
end

La primera columna es lo que hace por defecto.

La segunda hace que se evalúe lo que le pasas a :eval, así puedes
tener lo que tú quieras poner.

Más información:
http://www.height1percent.com/articles/2006/04/18/ajaxscaffold-3-1-0-released
Mira donde pone “Handling associations from the belongs_to side of
things”

Si hay alguna otra manera de hacerlo más fácil, me encantaría saberlo.
Yo te he dado lo que he podido encontrar.

Ah y otra cosa, creo que al generar hay que poner el nombre de la
tabla en singular. Eso creo vamos.

Un saludo

On 2/5/07, Fernando González Macías < [email protected]>
wrote:

Tengo un problema que no entiendo bien.

Tengo una tabla “laptops” en la cual un campo site_id de tipo int
(11) hará
referencia al “site” al que pertenece dicho “laptop”. El caso es que
si la
pongo con dicha nomenclatura site_id al realizar el comando:

C:> ruby script\generate ajaxscaffold Laptops , dicho campo no lo
incluye en
el formulario.

¿Esto es por alguna regla delimitada?. ¿Existe forma de cambiar
dicho
comportamiento?

Fernando González Macías

[email protected]


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es

¿Puedes poner el método create de laptops_controller?

Parece ser que intenta buscar @laptop y no lo encuentra.

Hola Luis. De nuevo muchas gracias por todo el interés que te estás
tomando. Llevo dos días tres días con Rails y los comienzos se hacen
difíciles, aunque al ver lo que se va consiguiendo poco a poco, ilusiona
;—))))

Te adjunto parte del log del development.log donde se muestra el error,
pero no soy capaz de interpretarlo. Quizás esté relacionada con la
definición del campo referenciado y la lista desplegable asociada al
mismo.

Processing LaptopsController#Create (for 127.0.0.1 at 2007-02-06
12:04:34) [POST]
Session ID: 73fc44b459c04494215b1f9060a4c4a0
Parameters: {“commit”=>“Create”, “action”=>“Create”,
“id”=>“1170759857140”, “controller”=>“laptops”,
“laptop”=>{“site_id”=>“1”, “num_movil”=>“asdfasdf”,
“umts”=>“asdfadfsasdf”, “nombre”=>“safd”, “observaciones”=>“asdfasdf”,
“modelo”=>“asdf”, “fecha_alta(1i)”=>“2007”, “ram”=>“asdf”,
“disco_duro”=>“asdf”, “fecha_alta(2i)”=>“2”, “fecha_alta(3i)”=>“6”,
“marca”=>“asdf”}, “scaffold_id”=>“laptop”}
Rendering laptops/Create

ActionView::TemplateError (Called id for nil, which would mistakenly be
4 – if you really wanted the id of nil, use object_id) on line #1 of
app/views/laptops/Create.rjs:
1: @options = { :scaffold_id => params[:scaffold_id], :action => “view”,
:id => @laptop.id }
2: @create_options = @options.merge(:action => “create”, :id =>
params[:id])
3:
4: if @successful
#{RAILS_ROOT}/app/views/laptops/Create.rjs:1:in
__bind_1170759874_812000' #{RAILS_ROOT}/app/views/laptops/Create.rjs:0:in__bind_1170759874_812000’
C:/RUBY/lib/ruby/gems/1.8/gems/activesupport-1.4.0/lib/active_support/core_ext/object/extending.rb:44:in
[]' C:/RUBY/lib/ruby/gems/1.8/gems/activesupport-1.4.0/lib/active_support/core_ext/object/extending.rb:44:ininstance_exec’
C:/RUBY/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_view/helpers/prototype_helper.rb:313:in
initialize' C:/RUBY/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_view/helpers/prototype_helper.rb:625:innew’
C:/RUBY/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_view/helpers/prototype_helper.rb:625:in
update_page' #{RAILS_ROOT}/app/views/laptops/Create.rjs:0:in_run_rjs_47app47views47laptops47Create46rjs’

Saludos y gracias por todo.


De: [email protected] en nombre de Luis V.
Enviado el: mar 2/6/2007 11:51
Para: La lista sobre Ruby On Rails (rubyonrails.com) en castellano
Asunto: Re: [Ror-es] Problemas con campos con nombre finalizados en _id

Mira en development.log justo cuando le des a create new. Cuando pasa lo
de la ruedecita, y no hace na más, suele ser que ha petado en algún
sitio.

Si estás desarrollando con RadRails, utiliza el comando tail en
development.log para ver el log avanzando conforme haces las acciones.

Pega el trocito de log y a ver si te podemos ayudar.

Un saludo

On 2/6/07, Fernando González Macías [email protected] wrote:

Gracias Luis.

Efectivamente supongo que debe ser el comportamiento habitual en
AjaxScaffold respecto a las claves foráneas. El caso es que con el
comentario tuyo ya he conseguido mostrar la información del campo
referenciado, tanto en list, como en la edición y adicción de registros.
Es decir que obtengo el desplegable que es lo que quería.

Evidentemente en el _form.rhtml he tenido que incluir las etiquetas
correspondientes. Como sigue:

Empresa <%= select 'laptop','site_id' , Site.find_all.collect {|p| [p.nombre, p.id] } %>

El tema ahora es que en la edición no obtengo ningún problema, puedo
modificar cualquier campo, incluido el campo empresa referenciado a
través del desplegable. Sin embargo a la hora de añadir registros
nuevos, cuando voy a guardar se me queda en una especie de bucle,
continuamente con la “ruedecita dando vueltas” propia de operación en
curso.

¿Se le ocurre a alguien a que puede ser debido?. Pongo a continuación
el fuente de laptop.rb. Son dos tablas:laptops y sites. Un portátil
pertenece a un sitio(empresa).

require ‘ajax_scaffold’
class Laptop < ActiveRecord::Base

validates_presence_of :nombre

belongs_to :site, :foreign_key => "site_id"

@scaffold_columns = [
  AjaxScaffold::ScaffoldColumn.new(self, { :name => "nombre"}),
  AjaxScaffold::ScaffoldColumn.new(self, { :name => "site_id",
  :eval => "laptop.site.nombre",  :label => "Empresa"}),
 AjaxScaffold::ScaffoldColumn.new(self, { :name => "marca"}),
 AjaxScaffold::ScaffoldColumn.new(self, { :name => "modelo"}),
 AjaxScaffold::ScaffoldColumn.new(self, { :name => "disco_duro"}),
 AjaxScaffold::ScaffoldColumn.new(self, { :name => "ram"}),
 AjaxScaffold::ScaffoldColumn.new(self, { :name => "fecha_alta"}),
 AjaxScaffold::ScaffoldColumn.new(self, { :name => "umts"}),
 AjaxScaffold::ScaffoldColumn.new(self, { :name => "num_movil"}),
 AjaxScaffold::ScaffoldColumn.new(self, { :name => 

“observaciones”}),
]
end

Saludos y gracias.

Fernando González Macias
[email protected]


De: [email protected] en nombre de Luis V.
Enviado el: mar 2/6/2007 08:36
Para: La lista sobre Ruby On Rails ( rubyonrails.com) en castellano
Asunto: Re: [Ror-es] Problemas con campos con nombre finalizados en
_id

En ajax scaffold no te pone las claves foráneas supongo que porque son
números que no dicen nada al usuario final.

Hasta donde yo sé, tienes que definirlas manualmente en el modelo. Yo
lo hago así:

Imagina que la tabla tiene un id, un nombre y una clave foránea que es
cliente_id
cliente_usuario.rb:
require ‘ajax_scaffold’
class ClienteUsuario < ActiveRecord::Base
belongs_to :cliente

@scaffold_columns = [
AjaxScaffold::ScaffoldColumn.new(self, { :name => "nombre"}),
AjaxScaffold::ScaffoldColumn.new(self, { :name => "cliente_id",
  :eval => "cliente_usuario.cliente.descripcion", :label => 

“Cliente”})
]
end

La primera columna es lo que hace por defecto.

La segunda hace que se evalúe lo que le pasas a :eval, así puedes
tener lo que tú quieras poner.

Más información:
http://www.height1percent.com/articles/2006/04/18/ajaxscaffold-3-1-0-released
Mira donde pone “Handling associations from the belongs_to side of
things”

Si hay alguna otra manera de hacerlo más fácil, me encantaría saberlo.
Yo te he dado lo que he podido encontrar.

Ah y otra cosa, creo que al generar hay que poner el nombre de la
tabla en singular. Eso creo vamos.

Un saludo

On 2/5/07, Fernando González Macías < [email protected]>
wrote:

Tengo un problema que no entiendo bien.

Tengo una tabla “laptops” en la cual un campo site_id de tipo int
(11) hará
referencia al “site” al que pertenece dicho “laptop”. El caso es que
si la
pongo con dicha nomenclatura site_id al realizar el comando:

C:> ruby script\generate ajaxscaffold Laptops , dicho campo no lo
incluye en
el formulario.

¿Esto es por alguna regla delimitada?. ¿Existe forma de cambiar
dicho
comportamiento?

Fernando González Macías

[email protected]


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs