Skip to content

Instantly share code, notes, and snippets.

@jesuslerma
Last active August 29, 2015 14:22
Show Gist options
  • Save jesuslerma/f6059cf3f751b286f781 to your computer and use it in GitHub Desktop.
Save jesuslerma/f6059cf3f751b286f781 to your computer and use it in GitHub Desktop.
Se describen los pasos para refactorizar una busqueda
#Teníamos este código
cuentas = Poliza.where(:empresa_id => self.id)
.where("extract(year from fecha_documento_original) = ? ", year)
.where("extract(month from fecha_documento_original) = ? ", month)
#Hasta aquí es fácil leer que estamos buscando las polizas de cierta empresa en un mes y año especificos
#pero podemos observar que cada uno de los where los podemos reutilizar multiples veces ya que siempre vamos a buscar
#polizas de una empresa en espécifico y lo mismo pasa con un año y un mes especifico
#por que no reutilizar esta busqueda, ¿será posible disminuir las líneas de código y hacerlo más legible?
#Vamos a crear tres scopes of_company_id, in_year e in_month. Entonces dentro de Poliza.rb escribimos:
scope :of_company_id, ->(id) { where( empresa_id: id )}
scope :in_year, ->(year) { where("extract(year from fecha_documento_original) = ? ", year)}
scope :in_month, ->(month) { where("extract(month from fecha_documento_original) = ? ", month) }
#Por último reemplazamos la busqueda anterior:
Poliza.of_company_id(id).in_year(year).in_month(month)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment