Paperclip content type validation always fails on Internet Explorer

I just ran into a strange problem. It turns out that when you try to upload a file using paperclip on IE, the content-type is different from other browsers and you have to take of them if you want to use paperclip’s validates_attachment_content_type method.

I needed to add to my model validation the following content-types: “image/pjpeg” and “image/x-png”. I did not have a problem with gifs.

validates_attachment_content_type :logo, :content_type => ['image/jpeg', 'image/jpg', 'image/gif', 'image/png', 'image/pjpeg', 'image/x-png']

 

Rails: perdiendo la cabeza con before_save

Recientemente encontré un ‘bug’ en una aplicación que estoy desarrollando, tiene que ver con los callbacks de Rails, en específico before_save.

Por fín lo he resuelto, no de la manera que esperaba, tal vez por berrinchudo ya que aún me queda una duda, pero al fin puedo continuar desarrollando y un peso se ha ido de mí.

La parte afectada de la aplicación involucra 2 modelos, digamos:

class Category
  has_many :products
end
 
class Products
  belongs_to :category
end
 
app/models/category.rb
before_save
  return unless self.published
  self.products.first.amount = (algun calculo dinámico)
end

Justo en este callback es donde está lo misterioso, la cantidad(amount) del primer producto nunca cambiaba amenos que actualizara la categoría, la publicara y la grabara 2 veces!! a la 2a vez el cálculo se realizaba, esto me quitó el sueño y me hizo perder gran cantidad de tiempo analizando el problema.

por qué a la 2a vez si pasaba?

Corrí la aplicación con el debugger y pues Rails sí pasaba por esa parte del código pero la cantidad del producto quedaba intacta, incluso intente cosas como estas:

app/models/category.rb
before_save
  return unless self.published
  self.products.first.amount = (algun calculo dinámico)
  self.name = 'Algún nombre'
end

Y pues la primera vez que grababa, ya con el atributo de published en true, name sí se actualizaba pero amount no! sólo hasta la segunda… hasta la fecha no entiendo por que sucede esto, no he logrado llegar a una conclusión, lo que sí es que por lo pronto ya encontré una solución:

app/models/category.rb
before_save
  return unless self.published
  self.products.first.update_attribute(:amount, (algun calculo dinámico))
end

De esta manera el cálculo ocurre todas y cada una de las veces que la categoría es actualizada.

 

The future is always beginning now

Luego de un buen tiempo separado del blogging este inicio de año vuelvo ya que tengo un par de própositos que cumplir.

El primero tiene que ver con lo que he hecho desde mitad del 2007. En esas fechas un proyecto en el que estaba involucrado se vino abajo y para aprovechar el tiempo que tenía libre luego de eso me puse a leer sobre Ruby, ya que aparecía en todas partes, gracias a la fama que le trajo Rails y quería averiguar de que se trataba todo el alboroto.

Mi meta en ese entonces era aprender Rails, por su enfoque al desarrollo web. Al poco tiempo y luego de leer en repetidas ocasiones el mismo consejo, que aprendiera Ruby primero, decidí tomarlo, cambié mis libros de Rails por los de Ruby y vaya que grata sorpresa fue.

Primero, mucho de lo que había leído en los libros de Rails comenzaba a tener algo de sentido y segundo me enamoré totalmente del lenguaje, a tal grado que me enfoqué totalmente a aprenderlo, con el deseo de convertirme en un gran Rubysta y algún día ser un maestro en él.

Esta misión no ha resultado más que ser un placer, no hay día que no me guste utilizar Ruby, no me canso de ver código en mi pantalla, no me fastidia, no me aburre, no me defrauda.

En Marzo del 2008 conseguí mi primer empleo relacionado con Ruby y Rails, he tenido la oportunidad de trabajar en varios proyectos, de ampliar mi conocimiento sobre Rails, su uso en el mundo real y cada día reafirmo mi gusto por el lenguaje y el framework.

Todo lo anterior es lo que me ha traído hasta aquí, este blog es el siguiente paso en mi objetivo de convertirme en un mejor programador en Ruby.

Cuando hacia mi lista de propósitos para el 2009, me fijé que tenía que involucrarme más en la comunidad de Ruby, tanto en México como en el mundo, lo que hace que este esfuerzo cumpla 2 de mis metas. En el momento no me quedaba claro de qué forma lo haría pero esta semana obtuve mi respuesta.

Comenzaré escribiendo un tutorial de Ruby, lo publicaré aquí y donde me sea posible. Podré aportarlo a la comunidad, ampliaré y reforzaré conocimientos y me actualizaré ya que la nueva versión de Ruby, la 1.9, esta en plena adopción y hay cambios en la sintáxis y cientos si no miles de cambios en la api.

Así que el momento ha llegado de llevar mis conocimientos de Ruby al siguiente nivel, aportar a la comunidad, ayudarla a crecer, conocer gente que comparta mi misma pasión, utilizando nuevos medios de comunicación que hasta la fecha no he explotado para mi crecimiento.

Como aclaración, aunque en este post sólo hablo de Ruby, hasta inténsamente, no tengo nada en contra de ningún otro lenguaje, al contrario, espero en un futuro aprender más, como Python, que es el primero en mi lista y los que atraigan mi atención.