Pluralização no Rails e um pouco mais

05/02/07

Uma coisa muito comum entres as pessoas que estão começando a desenvolver em Ruby on Rails é desligar a pluralização, quase sempre para escrever os nomes dos modelos em português (codificar em português), onde as regras gramaticais são um pouco diferentes do inglês. E geralmente, isso é uma péssima idéia.

O Rails foi desenvolvido sob a máxima "Convention Over Configuration", que diz que é melhor seguir uma convenção que ter que realizar configurações para que seu aplicativo funcione. Quer usar em português? Sem problemas, mas você terá configurar as que mudar as regras de pluralização para funcionar com o português — como palavras terminas com "ção" — e se alguma regra não for satisfeita, terá que usar o set_table_name. Veja um exemplo que deixa ainda mais evidente, em termos de elegância:

@cliente = Cliente.find_by_nome "Nando Vieira"

Os "magic fields" como "created_at", "parent_id" e todos os outros terão que ser em inglês. Plugins como "acts_as_attachment", "acts_as_taggable" terão que ter os campos em inglês, a não ser que você queira modificá-los. Neste caso, boa sorte! ;)

E tem uma outra questão ligada a desenvolver códigos usando inglês ou não. Imagine que você fez um aplicativo super bacana, sucesso no mundo inteiro e uma empresinha chamada Google resolve comprar o seu projeto. Português??? Boa sorte… Pode parecer impossível, mas você simplesmente não sabe o que está por vir. E seguindo esta linha temos a parte de projetos Open Source.

Faça códigos em português e seu projeto está fadado à morte. Simples assim. Ele será usado se for muito bom e enquanto não surgir uma alternativa semelhante em inglês. Código em português só atraem colaboradores que falam português. O sentimento é o mesmo de quando você está procurando algum exemplo e cai em uma página em alemão, por exemplo. Você pode até olhar os códigos disponíveis na página, mas se uma dica estiver presente no meio do texto…

Você também abrirá portas para o mercado internacional. Hoje é muito fácil conseguir freelas no exterior. Basta ficar de olho em sites como o Programmer Meet Designer. São muito frequentes os trabalhos que podem ser realizados de qualquer lugar do mundo.

Um motivo forte para escrever em inglês? Torne seu código disponível para o mundo e abra-se para ele.

Suprimindo avisos no Ruby

17/01/07

Se você seguiu o post Localização de mensagens de erro e datas no Rails, deve ter percebido que toda vez que você inicia o WEBRick, mensagens avisando que você está sobrescrevendo constantes aparecem. Isso acontece por que o Ruby permite que você redefina constantes, diferente de outras linguagens, mas avisa antes.

=> Booting WEBrick...
./script/../config/../lib/overrides.rb:5: warning: already initialized constant MONTHNAMES
./script/../config/../lib/overrides.rb:6: warning: already initialized constant DAYNAMES
./script/../config/../lib/overrides.rb:7: warning: already initialized constant ABBR_MONTHNAMES
./script/../config/../lib/overrides.rb:8: warning: already initialized constant ABBR_DAYNAMES
=> Rails application started on http://0.0.0.0:3000

Você pode desabilitar essas mensagens somente no trecho onde você redefine suas contantes com a variável global $VERBOSE.

old_verbose = $VERBOSE
$VERBOSE = nil
 
Date::MONTHNAMES = [nil] + %w(Janeiro Fevereiro Março Abril Maio Junho Julho Agosto Setembro Outubro Novembro Dezembro)
Date::DAYNAMES = %w(Domingo Segunda-Feira Terça-Feira Quarta-Feira Quinta-Feira Sexta-Feira Sábado)
Date::ABBR_MONTHNAMES = [nil] + %w(Jan Fev Mar Abr Mai Jun Jul Aug Set Out Nov Dez)
Date::ABBR_DAYNAMES = %w(Dom Seg Ter Qua Qui Sex Sáb)
 
$VERBOSE = old_verbose

Definindo o fuso horário no Rails

26/12/06

Se você hospeda seu projeto em um servidor que não está alocado no Brasil, pode ter problemas com o fuso horário. Uma solução é fazer esta definição manualmente, tanto para o Rails, quanto para o MySQL.

No arquivo "environment.rb", adicione a seguinte linha:

ENV['TZ'] = 'America/Sao_Paulo'

No arquivo "application.rb", presente no diretório "app/controllers", adicione:

before_filter :set_timezone
 
def set_timezone
    ActiveRecord::Base.connection.execute "SET GLOBAL time_zone='-3:00'"
end

Uma outra solução possível, caso você seja o dono do servidor, é definir isso no arquivo "my.cfn". O grande problema é que isso não pode ser feito por usuários em planos compartilhados (isso é o que me foi dito pelo suporte da RailsPlayground). Veja mais informações sobre isto nos links abaixo.