Buenas, un saludo al foro.
Tengo la siguiente estructura de tablas en mi aplicacion:
productos:
id
nombre
fabricante_id
categoria_id
descuento
…
medidas:
id
ancho
largo
precio
producto_id
en los modelos rails de estas tablas tengo lo siguiente:
producto
has_many :medidas,:dependent=>:destroy,:order=>“precio”
medida
belongs_to :producto
Necesito ordenar los productos por precio, lo que quiere decir que de
cada producto debo hallar la medida con el precio menor y luego
aplicarle el descuento, lo que implica acceder a las 2 tablas.
Lo he solucionado de la siguiente manera a nivel de controlador:
Producto.paginate :page =>
params[:page],:conditions=>conditions,:select=>"productos.*,(min(medidas.precio)
- ( min(medidas.precio)*(productos.descuento/100) ) ) AS
precio_min",:joins=>"left join medidas on
productos.id=medidas.producto_id ",:group=>"productos.id
",:order=>“precio_min DESC”
- No he utilizado :include=>“medidas” porque por lo visto si usas la
opcion :include se ignora la opcion :select.
Bien, esto me funciona perfectamente pero me preguntaba si habia alguna
forma a nivel de modelo para poder acceder siempre al campo virtual
precio_min.
He pensado en sobrescribir el metodo find pero se me complica bastante
por lo que comentaba anteriormente de la opcion include.
Todo esto viene a raiz de que estoy usando el plugin activescaffold y me
seria muy comodo poder ordenar a nivel de modelo sin tener que volver a
implementarlo
en los controladores.
O sea tener siempre accesible :order=>“precio_min”
Al final me ha quedado un post bastante coñazo, en fin a ver si alguien
me echa una mano, un saludo.
Alfredo