Hola a todos soy nuevo en Rails y estoy haciendo pruebas. Les comento mi
situacion:
Tengo a nivel de base de datos una tabla productos
(id,tip_id,descproducto,precio) y una tabla
tipo_productos(id,descripcion).
Entonces un producto pertenece a un tipo de producto y un tipo de
producto
tiene N productos.
Entonces en el modelo tengo
class Producto < ActiveRecord::Base
belongs_to :tipo_producto
end
class TipoProducto < ActiveRecord::Base
has_many :productos
end
Bueno creo que voy bien… cierto?
Ahora en la vista show de productos se muestra el id del tipo de
producto y
yo necesito ver es la descripcion del tipo de producto y no se como
hacerlo.
En el controller tengo:
def show
@producto = Producto.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @articulo }
end
end
No se como encontrar la descripcion del tipo de producto y mostrarlo…
Les notifico que yo se hacerlo con el find_by_sql(“select
a.*,b.descripcion
from productos a, tipo_productos b where a.tip_id = b.id”)
pero entonces oara que sirve colocar las relaciones has_many y
belongs_to en
las clases modelos respectivas?
A ver quien me da una luz!
Muchas Gracias
Manuel P. wrote:
Hola a todos soy nuevo en Rails y estoy haciendo pruebas. Les comento mi
situacion:
Tengo a nivel de base de datos una tabla productos
(id,tip_id,descproducto,precio) y una tabla
tipo_productos(id,descripcion).
Entonces un producto pertenece a un tipo de producto y un tipo de
producto
tiene N productos.
Entonces en el modelo tengo
class Producto < ActiveRecord::Base
belongs_to :tipo_producto
end
class TipoProducto < ActiveRecord::Base
has_many :productos
end
Bueno creo que voy bien… cierto?
Ahora en la vista show de productos se muestra el id del tipo de
producto y
yo necesito ver es la descripcion del tipo de producto y no se como
hacerlo.
En el controller tengo:
def show
@producto = Producto.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @articulo }
end
end
No se como encontrar la descripcion del tipo de producto y mostrarlo…
Les notifico que yo se hacerlo con el find_by_sql(“select
a.*,b.descripcion
from productos a, tipo_productos b where a.tip_id = b.id”)
pero entonces oara que sirve colocar las relaciones has_many y
belongs_to en
las clases modelos respectivas?
A ver quien me da una luz!
Muchas Gracias
Bueno, esto es muy sencillo:
def show
@producto = Producto.find(params[:id]) #tanto en @producto como en
params tienes el id
@descripcion = TipoProducto.find(@producto.id).descripcion #Asà de
simple
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @articulo }
end
end
Ahora tienes que ir a la vista y mostrar la variable @descripcion.
Espero haberte sido de ayuda ;).
Aún más fácil: con la relación definida correctamente, en la vista
puedes
hacer
for producto in @productos
producto.nombre
…
producto.tipo_producto.descripcion
end
MÃrate bien las relaciones de Active Record ya que estas cosas son
básicas.
El dÃa 12 de junio de 2008 21:13, Carlos Belizón <
[email protected]> escribió:
Emili Parreño wrote:
Aún más fácil: con la relación definida correctamente, en la vista
puedes
hacer
for producto in @productos
producto.nombre
…
producto.tipo_producto.descripcion
end
MÃrate bien las relaciones de Active Record ya que estas cosas son
básicas.
El dÃa 12 de junio de 2008 21:13, Carlos Belizón <
[email protected]> escribió:
Pero él está trabajando para mostrar un sólo artÃculo, no todos, asà que
no sé si tu solución es correcta. ¿No?
Lo he puesto asà porque es un caso tÃpico de la vista index, si solo
quiere
ver la descripcion de un tipo de producto y tiene @producto, se puede
hacer
@producto.tipo_producto.descripcion
El dÃa 12 de junio de 2008 23:59, Carlos Belizón <
[email protected]> escribió:
Emili Parreño wrote:
Lo he puesto asà porque es un caso tÃpico de la vista index, si solo
quiere
ver la descripcion de un tipo de producto y tiene @producto, se puede
hacer
@producto.tipo_producto.descripcion
El dÃa 12 de junio de 2008 23:59, Carlos Belizón <
[email protected]> escribió:
Sigo sin verlo, producto pertenece a tipo_producto, y tipo_producto
puede tener varios productos, ¿Cómo va acceder de esa forma?
Según lo que decia Manuel:
class Producto < ActiveRecord::Base
belongs_to :tipo_producto
end
class TipoProducto < ActiveRecord::Base
has_many :productos
end
Entonces un producto tiene UN tipo de producto, por tanto producto
tendrá un
campo llamado tipo_producto_id que es una clave foránea para acceder al
tipo
de producto del producto. Luego:
1 producto tiene 1 tipo de producto (relación 1 a1)
1 tipo de producto tiene muchos productos (relación 1 a N)
Por tanto, si tenemos una variable de instancia de la clase producto,
podemos hacer:
@producto.tipo_producto.descripcion
Ya que el tipo de producto es unico para cada producto.
Esto es todo.
PD: Carlos, el código que tu pusiste de ejemplo está mal
def show
@producto = Producto.find(params[:id]) #tanto en @producto como en
params tienes el id
@descripcion = TipoProducto.find(@producto.id).descripcion #Asà de
simple
Esto busca un tipo de producto que tenga el mismo ID que el producto
El dÃa 13 de junio de 2008 13:19, Carlos Belizón <
[email protected]> escribió:
Emili Parreño wrote:
Esto busca un tipo de producto que tenga el mismo ID que el producto
El dÃa 13 de junio de 2008 13:19, Carlos Belizón <
[email protected]> escribió:
Tienes razón, qué mal lo estaba haciendo yo en mi aplicación :S.
Manuel P. wrote:
Muchas gracias Emili me funciono perfectamente.
Gracias a ti también Carlos pero te informo que la solucion que me
suministraste la implemente y como dijo Emili esobusca un tipo de
producto
que tenga el mismo ID que el producto.
El dÃa 13/06/08, Emili Parreño [email protected] escribió:
Hombre, teniendo en cuenta que el ID de tipo_producto ha de ser único,
tan mal no estaba la solución (pienso yo), lo que sà es que no usaba la
potencia de Rails.
Muchas gracias Emili me funciono perfectamente.
Gracias a ti tambien Carlos pero te informo que la solucion que me
suministraste la implemente y como dijo Emili esobusca un tipo de
producto
que tenga el mismo ID que el producto.
El dÃa 13/06/08, Emili Parreño [email protected] escribió: