Acts as date Module

Thursday, 26 June , 2008

Esta es una solución que se me ocurrió para hacerme más cómodo el trabajo con
el atributo created_at de un modelo, por ej:

Para saber el año de creación de un post, haríamos lo siguiente:

>> p = Post.find(1)
>> p.created_at.month
=> 6

como podemos observar retorna 6, pero resulta que yo lo necesito necesito con el siguiente formato: “06″. Lo mismo pasa con el día:

>> p = Post.find(1)
>> p.created_at.day
=> 4
module ActsAsDate

  def year
    created_at.strftime("%Y")
  end

  def month
    created_at.strftime("%m")
  end

  def day
    created_at.strftime("%d")
  end

  def year_month
    [year, month]
  end

  # Armo un string para usarlo en un find
  #    ej:
  #   params = {:year => "2008", :month => "06"}
  #   Post.all(:conditions => Post.created_at_conditions(params))
  #
  def self.included(klass)
    klass.class_eval do
      def self.created_at_conditions(params)
        return nil if params[:year].blank? or params[:month].blank?
        "created_at like '#{params[:year]}-#{params[:month]}%'"
      end
    end
  end

end

Entonces tenemos que incluir este módulo en modelo que lo queremos usar:

class Post < ActiveRecord::Base

  include ActsAsDate

end

Ahora con esto directamente hago p.month, p.day, p.year y obtengo el mes, día y año de creación del post con el formato que necesito y escribiendo menos código :). Además agregué un método que me arma el param conditions, que se podría un usar así por ej:


class PostsController < ApplicationController

def list
    @posts = Post.paginate(
         :page => params[:page],
         :order => 'created_at DESC',
         :conditions => Post.created_at_conditions(params)
    )

    respond_to do |format|
      format.html
      format.xml  { render :xml => @posts }
    end
  end

end

De esta manera no tengo que estar preguntando en el controller si vienen (year y month) como parámetros, por ahora este modulo sólo funciona con el atributo created_at por que está hardcodeado, pero con pocas modificaciones se podría hacer que funciona para cualquier atributo.
Ahora lo que me pregunto es si Rails ya tiene alguna solución mejor para este problema, si alguien la conoce que me lo haga saber por favor (yo no la encontré), además se aceptan modificaciones, sugerencias y comentarios.

Información de debug en Rails

Thursday, 26 June , 2008

Muchas veces cuando estamos desarrollando una aplicación web necesitamos mirar cierta información de debug, acá les dejo una mi versión de este senippet que leí por acá .

La idea es poner este código en un partial:

 app/view/views/shared/_debug_info.html.erb

y luego ponemos el render en el layout de la aplicación:

 <%= render :partial => 'shared/debug_info' %>

Va el pastie: http://pastie.org/222621

Rails agrega un nuevo método al módulo Enumerable. Vamos al código para explicar cómo funciona este nuevo método:

>> Post.all.many?
=> false
>> Post.create({:title => "hola", :post => "hola"})
>> Post.all.many?
=> false
>> Post.create({:title => "otro hola", :post => "otro hola"})
>> Post.all.many?
=> true
>> Post.all.size
=> 2
>> posts = Post.find(:all, :conditions => {:post => "hola"})
>> posts.many?
=> false
>> posts.size
=> 1

La función de este nuevo método many? es básicamente encapsular collection.size > 1, es un detalle bastante cómodo que opinan uds?

Grupo de usuarios de Ruby del litoral

Sunday, 02 September , 2007

Esta semana hablando con algunos chicos de lug oro verde nos surgió la idea de hacer una reunión con todos aquellos que estamos interesados en ruby y ruby on rails, entonces pensé… por que no crear un grupo de usuarios de ruby del litoral? y acá está el resultado: tenemos wiki y lista de correo , desde ya litoraleños están todos invitados a participar, los esperamos!!!.

http://www.rubylit.com.ar/

Bueno, lo primero que quiero hacer es agradecer a la gente de lugoroverde por invitarnos a las jornadas, la charla estuvo muy buena (mejor que de lo que yo creía ) la gente quedó muy entusiasmada con esto de Rails, luego de algo de teoría hicimos un pequeño ejemplo práctico, creamos un modelo y mostramos el scaffold y como personalizar las vistas creadas.

Les dejo acá los slides de la charla dwsr.pdf
La última parte de la charla

El sábado 25 de agosto voy a dar una charla con Esteban Fornal (más conocido como Chaco) en las 4tas jornadas regionales de software libre de oro verde en Entre Ríos, la charla va a ser una introducción a Ruby on Rails, mostraremos las principales características del framework (al menos las que más nos gustan a nosotros) y si hay tiempo vamos a hacer algo de práctica. Nuestro prinicipal objetivo es motivarlos a que prueben RoR por cuenta propia, y entren en este marivolloso mundo de la programación ágil y divertida.

Los esperamos!!!