A velha e boa usabilidade

Prover uma aplicação com alto nível de usabilidade é algo muito importante.

Todos concordam nesse ponto, correto?

Bem, nem todos. Estava preenchendo uma planilha do Excel 2007 enviada por um colega de trabalho. Este colega adicionou validações em algumas células para que os valores inseridos ficassem na faixa de 0 a 10. Apenas por curiosidade, digitei o número 70 em uma célula e recebi este amigável aviso do programa:

Validação no Excel 2007

Quando esta janela pula na tela, a primeira impressão é de que houve um erro grave: um grande X vermelho e três botões em uma caixa de mensagem não podem significar boas notícias. Porém, o único problema é que o valor está fora da faixa definida. Aliás, faixa que o Excel nem sequer mostra na mensagem.

Está aí um bom exemplo de como não avisar o usuário de um problema de validação.

Símbolos do Ruby

Vi ontem no blog do Satish Talim e o Akita acaba de publicar em seu blog um artigo especial que ele escreveu sobre os símbolos do Ruby, algo que parece totalmente alienígena para programadores de outras linguagens iniciando em Ruby, mas é simples e muito útil.

Em inglês: http://rubylearning.com/blog/2007/11/26/akitaonrails-on-ruby-symbols/

Em português: http://www.akitaonrails.com/2007/11/26/ruby-symbols

Aproveitem também para baixar a apostila de Ruby do Satish e entrar no fórum do site. É mais uma boa fonte para aprender Ruby.

“Brincando” com o pluralizer do Rails

Geoff Grosenbach tem uma seção muito útil em seu site que você pode utilizar para testar os resultados de vários métodos do pluralizer do Rails.

O “Pluralization Tester” recebe uma string e mostra os resultados de métodos como pluralize, humanize, camelize e vários outros.

HasFinder - estendendo e encadeando condições de busca

HasFinder é uma extensão ao ActiveRecord criada por Nick Kallen, da Pivotal Labs, que permite a flexibilização de métodos customizados de busca, ao estilo do que é possível fazer com with_scope ou com os plugins scope_out e scope_proxy.

A diferença é que o HasFinder permite o encadeamento de condições e também o uso das mesmas em associações. Exemplos:

Definindo os métodos de busca e suas condições:

1
2
3
4
class Article
  has_finder :published, :conditions => {:published => true}
  has_finder :popular, :conditions => ...
end

É possível encadeá-los ou usar outros métodos sobre eles:

1
2
3
  Article.published.popular
  Article.published.popular.count
  Article.popular.find(:first)

Trabalhando com associações:

1
2
3
4
5
6
class User
  has_many :articles
end
 
user.articles.popular.find(:first)
user.articles.published.popular.average(:view_count)

Também é possível estendê-los com blocos:

1
2
3
4
5
6
7
class Article
  has_finder :unpublished, :conditions => {:published => false} do
    def published_all
      find(:all).map(&:publish)
    end
  end
end

Leia mais aqui.

Melhorando as condições em seus métodos de pesquisa

O Carlos Brando publicou em seu blog uma dica muito legal sobre o parâmetro conditions dos métodos de pesquisa do Rails. Vale a pena conferir.

Rails - Desabilitando as “colunas mágicas” relacionadas a timestamps

As “colunas mágicas” do Rails são aquelas automaticamente gerenciadas pelo framework, como created_at e updated_at no caso de timestamps. Essa funcionalidade é muito útil, mas às vezes precisamos desativá-la.

Um caso como esse ocorreu comigo: possuo uma tabela com uma coluna chamada last_viewed_at, à qual gerencio manualmente atualizando a data sempre que um registro é visualizado pelo usuário para efeito de pesquisas e estatísticas no sistema. Como nessa mesma tabela há as colunas mágicas, o Rails atualizava a coluna update_at toda vez que eu fazia a alteração mencionada acima. Para mim isso não era interessante: essa coluna só deveria ser atualizada quando houvesse alteração feita pelo usuário.

A solução que encontrei foi desabilitar as o gerenciamento automático dos timestamps, fazer a alteração e então habilitar a funcionalidade novamente, desta forma:

ActiveRecord::Base.record_timestamps = false
# alteração no registro
ActiveRecord::Base.record_timestamps = true

Obs: vale lembrar que isso vale apenas para as colunas mágicas relacionadas à timestamps. Existem outras como type, id e lock_version, entre outras.

Se alguém souber de uma forma melhor para conseguir esse comportamento, escreva nos comentários.

← Previous Page