Posted: March 25th, 2009 | Author: FreedomCoder | Filed under: ActiveRecord, Open Source, Programming, Rails | Tags: ActiveRecord, Open Source, Programming, Rails | Comments Off
Según se vaya avanzando en un proyecto, es posible que nos veamos en la necesidad de encotrar los registros vecinos para el que estemos utilizando en un momento dado. De este modo, por ejemplo si uno esta posicionado en un registro y desea obtener el siguiente, tener algo como “next” o “previous” sería muy útil.
Acts_as_ordered es un plugin interesante para obtener los registros previos o siguientes a uno determinado.Es muy versatil y potente. Se puede descargar de aquí.
Para mi cuestiones particulares, lo resolví a lo bestia, incluyendo estos dos métodos en la clase que los requería.
-
def self.previous id
-
prev_id= self.minimum(:id, :conditions => ['id > ?', id])
-
self.find(prev_id)
-
end
-
-
def self.next id
-
next_id=self.maximum(:id, :conditions => ['id < ?', id])
-
self.find(next_id)
-
end
Saludos
Inspirado de un reply en Duane’s Brain
leer más
(Via Rodolinux – Rodolinux’s Playground.) Original Link: Obtener registros previos/siguientes con ActiveRecord
Posted: March 22nd, 2009 | Author: FreedomCoder | Filed under: ActiveRecord, Programming, SQL | Tags: ActiveRecord, Programming, SQL, tricks | Comments Off
Buscando la razón por la cual me falla un find_each dentro de un rake, me encontré con este sitio que sin dudas no deja de ser interesante. Suele pasar que tenemos en claro como construir una sentencia SQL pero no sabemos como hacerlo en ActiveRecord. Este pequeño script lo resuelve. Lo estuve probando y hay casos en los que no devuelve nada, como ser pasando rangos con BETWEEN, por ejemplo.
select * from members where first_name = 'Harold' and age = '34'
=> Members.find(:all, :conditions => {:age => "34", :first_name => "Harold"}
select * from members
=> Members.find(:all)
select * from members where first_name = 'Harold'
=> Members.find(:all, :conditions => {:first_name => "Harold"}
select * from members where first_name like '%Harold%'
=> Members.find(:all, :conditions => ["first_name like ?", '%Harold%'])
leer más
(Via Rodolinux – Rodolinux’s Playground.)Original Link: Creando consultas ActiveRecord a partir de SQL
Posted: March 21st, 2009 | Author: FreedomCoder | Filed under: ActiveRecord, Programming, Rails | Comments Off
Entre las cosas con que un desarrollador se encuentra a lo largo de los proyectos, es con la tarea de integrar viejas y nuevas tecnologías, para construir algo nuevo y distinto. Este puede ser el caso de quienes tienen que integrar un AS/400 con un MS SQL Server, u o bien de aquellos que se ven en la necesidad de incorporar bases de datos preexistentes y de diversos tipos para darles un tratamiento adecuado. De este modo, por ejemplo, es usual que se pretenda compartir información en bases de datos locales mediante interfaces web. Para este caso, existen herramientas de desarrollo que permiten hacerlo, como ser Java, o en mi caso en particular, Rails.
leer más
(Via Rodolinux – Rodolinux’s Playground.) Original Link: Conectando Rails a múltiples bases de datos
Posted: March 20th, 2009 | Author: FreedomCoder | Filed under: ActiveRecord, metaprogramming | Tags: ActiveRecord, metaprogramming, Programming | Comments Off
Hace bastante que vengo usando la genial biblioteca “Acts as state machine” que nos permite tener un máquina de estados finita (o autómata finito) en un modelo Active Record y a partir de las últimas versiones en cualquier objeto Ruby, y desde hace un tiempito que vengo pensando “Qué bueno sería que ASSM te genere un named_scope por cada estado posible”, entonces si por ejemplo tenemos 2 estados: active, inactive podríamos hacer algo así:
User.inactive # Esto retorna todos los usuarios con estado inactive
User.active # Esto retorna todos los usuarios con estado active
Bueno, acá está la solución que se me ocurrió:
class User < ActiveRecord::Base
acts_as_state_machine :initial => :inactive
state :inactive
state :active
event :active do
transitions :from => :inactive, :to => :active
end
def initialize(*args)
self.class.define_named_scopes
super *args
end
def self.define_named_scopes
self.states.each{|st|
self.named_scope st, :conditions => { :state => st.to_s },
: order => 'created_at DESC'
}
end
end
Nice eh! tenemos un método que escribe los named_scope por nosotros y seguro que se puede mejorar o quizás agregar una opción a AASM para que lo haga cuando lo deseemos, el tema es que cómo necesitamos la lista de los estados, debemos ejecutar esto después de especificar los mismos, aunque una solución más elegante sería modificar AASM y hacer que los named_scope se genere cada vez que especificamos un estado.
Hasta la próxima!

(Via Gastón Ramos – Ruby, Rails….) Original Link: Acts as state machine y metaprogramming