Em um outro post eu comentei sobre como conhecer bem as convenções do Rails. Bem, este post irá aprofundar um pouco mais no assunto ao abordar as pluralizações.
Pluralização é uma das convenções do Rails para quando você cria por exemplo, um modelo. Por “padrão”, o Rails se encarregará de criar toda a estrutura necessária ao modelo, então o modelo deve ser um nome no singular, a tabela criada estará no plural, o modelo estará no singular, mas com a primeira letra capitalizada (maiúscula), etc.
Esta convenção é de fato uma mão na roda, porém ela só é efetiva quando desenvolvemos usando o inglês. Quando aplicado a gramática portuguesa, ela se torna um problema já que Rails não tem suporte a outras línguas.
A tabela abaixo demonstra a pluralização do modelo carro para todos os métodos gerados pelo Rails:
Método Resultado
camelize Carro
classify Carro
demodulize carro
foreign_key carro_id
humanize Carro
pluralize carros
singularize carro
tableize carros
titleize Carro
underscore carro
Tudo lindo correto? Errado. Vamos pluralizar agora o modelo injeção:
A primeira coisa é eliminar o cedilha e acentuações o que resulta em injecao:
Método Resultado
camelize Injecao
classify Injecao
demodulize injecao
foreign_key injecao_id
humanize Injecao
pluralize injecaos
singularize injecao
tableize injecaos
titleize Injecao
underscore injecao
Em vermelho o problema, Rails não reconhece a gramática portuguesa, logo a pluralização não resulta na forma correta injecoes (injeções).
Para verificar como o Rails trabalha com a pluralização visite o: nubyonrails.
Existem maneiras de desativar a pluralização e fazer a programação “na marra”, mas isso gera um custo adicional desnecessário ao desenvolvedor além de quebrar o conceito do framework que é o de focar o desenvolvimento apenas naquilo que é fundamental.
E, traduzindo o modelo, não irá garantir que os campos que são controlados pelo Rails como “id”, “created_at”, “updated_at” entre outros, também serão traduzidos, ou seja, você terá que mantê-los ou novamente, dedicar tempo a esta tarefa.
Por fim, qual dos códigos abaixo é o de mais fácil compreensão?
1: @liner = Liner.find_by_code "001"
2: @liner = Liner.find_by_codigo "001"
3: @armador = Armador.find_by_code "001"
4: @armador = Armador.find_by_codigo "001"
Se você domina o inglês, obviamente irá optar pela primeira opção. Se você é adepto do português irá escolher a opção 4 (depois de desabilitar a pluralização), só que isso implica em ter o seu código funções pseudo-traduzidas pois o “find_by” não é traduzido. Ah! Mas então, para evitar isso, você pode partir para a solução 3, ter todos os campos escritos em inglês, o que não parece lógico já que não existe nenhum grande esforço adicional em também ter o modelo traduzido.
Portanto, a melhor solução é continuar usando a pluralização e traduzir seus campos para o inglês. Quem sabe, com o tempo que você vai ganhar no desenvolvimento, você consegue finalmente se inscrever naquele curso de inglês? 🙂