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:

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.
