Category Archives: Ruby on Rails

Fixing fieldWithErrors behavior

Dealing with errors in Rails forms can be a hard task. When a form field has errors, ActionView wraps the input in a div of class “fieldWithErrors”. The result is something like this

<p><div class=”fieldWithErrors”><input id=”user_name” name=”user[name]” type=”text” value=”" /></div></p>

A div inside a paragraph ?¿?¿? This behavoir can be very annoying and isn’t XHTML compliant. A [...]

Define index lengths in your migrations

Defining an index length is a common practice in order to avoid large data indexes, and improve performance. Some time ago, I sent a patch to Rails core, which added the functionality to define index lengths in the migrations. For example:
add_index(:accounts, [:name, :surname], :name => ‘by_name_surname’, :limit => 10)
While I wait a decission from the [...]

How to import data from CSV files in Rails

CSV is commonly used to import data from an external source. You can populate your Rails applications with emails, user names, phone numbers etc. from other applications, databases, excel files…
Let me show you an example.

#users.csv
kevin, kevin@gmail.com
Jhon, jhon@gmail.com

require ‘csv’
CSV.open(’users.csv’, ‘r’).each do |row|
User.create(:username => row[0], :email => row[1])
end

The open method, opens the specified file, [...]

Manejo de excepciones en Rails

Una mala práctica habitual en Rails es no manejar correctamente las excepciones. Algunas excepciones comunes son: ActiveRecord::RecordNotFound, ActionController::RoutingError o ActionController::UnknownAction. Para poder manejar estas excepciones y realizar una acción determinada cuando se produzcan se puede utilizar el método rescue_from. Veamos un ejemplo:

class ApplicationController < ActionController::Base
rescue_from ActiveRecord::RecordNotFound, :with => :record_not_found

private
[...]

Cómo “humanizar” los nombres de atributos en Rails

Desde las últimas versiones de Rails, habréis observado que en los formularios se utilizan símbolos para mostrar el nombre de los atributos, por ejemplo
<%= f.label :title_spanish %>
Esto es perfecto, te ahorra mucho trabajo, pero tiene el problema de que normalmente el nombre de los atributos no es el que realmente queremos mostrar en las vistas [...]

Grup Girona on Rails

Aquest matí fent un cafè amb en Jaime Iniesta hem decidit crear el grup Girona on Rails. La idea és fer reunions per parlar de Rails, Ruby, Git, Shoes, Merb… compartir experiències, aprendre i sobretot passar-ho bé.
De moment hem creat un grup a Google per concentrar la informació rel.lacionada amb el grup, així que si [...]

Autotest con Growl

Creamos un archivo en nuestro directorio de usuario llamado .autotest con el siguiente contenido:

require ‘autotest/redgreen’
require ‘autotest/html_report’
require ‘autotest/menu’
module Autotest::Growl

def self.growl msg, options={}
salida = “growlnotify -n autotest –image \”#{options[:img]}\” -p #{options[:pri]} -d #{rand(100)} -m \”#{msg}\” \”Tests\” #{options[:sticky]}”
system salida
end

Autotest.add_hook :ran_command do |at|
[...]

Optimización: mejorando las consultas MySQL en Rails (I)

Rails es un gran framework, pero la magia y la ágilidad que te proporciona tiene un precio y no es otro que la velocidad y esto se deriva en problemas de escalabilidad. Para una aplicación con poco tráfico o incluso con un tráfico medio la manera de realizar las consultas en Rails nos puede ser [...]

Las 100 aplicaciones Rails con más tráfico

Se ha hablado mucho sobre si Ruby on Rails escala o no, sobretodo han hablado los detractores de Rails, intentando buscar argumentos para desacreditarlo.
Que una aplicación escale es la suma de muchos factores, y el más importante es el humano. No hay ni un solo lenguaje o framework que escale “out of the box”, hay [...]

Recursos anidados (o no) en REST

La filosofía REST permite relacionar los recursos entre ellos de manera que los podamos anidar para que únicamente tengan sentido en un contexto determinado. Supongamos que tenemos un blog multiusuario donde hay “users”, “posts” y “comments”. No tiene demasiado sentido acceder a un comentario directamente con una url del tipo /comments/34, ya que un comentario [...]