viernes, 25 de junio de 2010

ActiveRecord y los SQL

De un tiempo a esta parte, me rompí el coco con ActiveRecord y no me cuadraban ciertas cosas, pero últimamente se me está despejando el panorama.

Aquí un ejemplo comparativo de ActiveRecord y su salida en SQL







ActiveRecord (con will_paginate)
SQL

@clientes = Cliente.paginate :page => params[:page], :per_page => 10,

:joins => [ :solicitudes => :clientes_movimientos ],

:conditions => ["clientes_movimientos.saldo > 0 and clientes_movimientos.fecha_vencimiento < date('today')"],

:select =>"distinct clientes.*"

SELECT distinct clientes.*

FROM "clientes" INNER JOIN "solicitudes" ON solicitudes.cliente_id = clientes.id INNER JOIN "clientes_movimientos" ON clientes_movimientos.solicitud_id = solicitudes.id WHERE (clientes_movimientos.saldo > 0 and clientes_movimientos.fecha_vencimiento < date('today')) LIMIT 10 OFFSET

Lo bueno de ActiveRecord es que como se puede notar, separa de una manera elegante, los joins, las condiciones, la modificación de la parte del select, siendo más legible incluso que en el SQL.


Aquí lo mescle con will_paginate pero es lo mismo con el método .find solo que se quita lo relativo a will_paginate.

@clientes = Cliente.find( :joins => [ :solicitudes => :clientes_movimientos ],

:conditions => ["clientes_movimientos.saldo > 0 and clientes_movimientos.fecha_vencimiento < date('today')"],
:select =>"distinct clientes.*")

Bueno espero que le sirva a alguien, me despido, hasta otro dibague sobre lo que voy descubriendo en Ruby on Rails.

lunes, 21 de junio de 2010

Phusion Passenger y Will_paginate

Gracias a los muchachos de los foros de RoR, aclaro mi anterior entrada...
Lo importante cuando se instala una gema en linux es siempre hacerlo a nivel de sistema.
sudo gem install
Y no simplemente
gem install

Porque?
Es devido a que pushion passenger no puede "ver" la gema, cuando se instala a nivel de usuario sin sudo, debe de ser a nivel de sistema, de hay la importancia del "sudo". Sino lanza un error por ejemplo: "no such file to load --will_paginate (MissingSourceFile)"

En sintesis, Passenger corre como otro usuario y por ende, no puede encontrar las gemas que instalaste sin utilizar sudo.

Si me exprese mal, por favor corrijanme, pero espero que le sirva a alguien esta mi experiencia.

Y otra cosa, la gema mislav-will_paginate ya esta obsoleta, mejor es usar simplemente.
sudo gem install will_paginate.

viernes, 18 de junio de 2010

Instalacion de Will Paginate

Soy novato en ruby no lo voy a negar pero al menos quiero dar mi granito de arena.
Necesite intalar un paginador y que mejor que Will paginate, primero googleando, encontre la forma en que tradicionalmente se instala una gema.
gem install will_paginate
Pero no funciono aunque si me dijo que se instalo al escribir
gem query --local

Asi que me puse a googlear de nuevo y ahora encontre otra forma.
Primero hay que agregar el repositorio en donde esta la gema porque no viene en los repositorios por defecto asi que ejecute
gem sources -a http://gems.github.com

nestor@m2h:/home/invitado$ gem sources -a http://gems.github.com
http://gems.github.com added to sources
nestor@m2h:/home/invitado$ gem sources
*** CURRENT SOURCES ***

http://gems.rubyforge.org/
http://gems.github.com

Bueno asi agregue el repositorio donde esta will_paginate

Despues instale will_paginate
gem install mislav-will_paginate

nestor@m2h:/home/invitado$ gem install mislav-will_paginate
WARNING: Installing to ~/.gem since /usr/lib/ruby/gems/1.8 and
/usr/bin aren't both writable.
WARNING: You don't have /home/nestor/.gem/ruby/1.8/bin in your PATH,
gem executables will not run.
Successfully installed mislav-will_paginate-2.3.11
1 gem installed
Installing ri documentation for mislav-will_paginate-2.3.11...
Installing RDoc documentation for mislav-will_paginate-2.3.11...

Ahora bien no se porque salieron esos WARNING, pero al probarlo en mi aplicacion, todo funciono.
Lo que pasa es que desarrollo en Windows Vista pero mi cliente tiene su aplicacion en Ubuntu Server 9

Bueno, esto es todo.