Hash.slice

Rails tem joias escondidas esperando para serem descobertas. Vou demonstrar o uso de Hash.slice, que é uma das principais extensões do ActiveSupport.

Aqui está um exemplo de como Hash.slice pode limpar um controlador, pegue este código existente, por exemplo:

def index
@users = User.paginate({ :page => params[:page].present? ? params[:page].to_i : 1, :per_page => params[:per_page].present? ? params[:per_page].to_i : 12 })
end

Com Hash.slice podemos encurtá-lo para:

def index
@users = User.paginate({ :page => 1, :per_page => 12 }.merge(params.slice(:page, :per_page)))
end

Hash.slice é que é muito indulgente. O método só retorna os atributos se eles existirem. Em nosso exemplo, temos certeza de que todas as condições serão atendidas porque os valores padrão serão substituídos apenas se Hash.slice os retornar.