Convenções de Rails para nomes de objetos de banco de dados

Boa tarde a todos. Tenho algumas dúvidas de iniciante que talvez já tenham sido resolvidas por vocês.

Estou iniciando um projeto em Rails em um local onde o pessoal que administra o banco de dados possui um padrão de nomenclatura para nomes de tabelas, colunas, etc. que difere daquele consagrado pelo framework.

Sendo assim, pergunto: existe alguma forma de usar outra convenção de nomes de objetos de banco de dados no Rails sem deixar de usar seus recursos? Por exemplo, gostaria de continuar aproveitando o poder das migrações porém seguindo outro padrão de nomes.

Outra coisa: se eu tiver um modelo com nome composto, como fazer o Rails tratar seu plural adequadamente? Como exemplo, supondo que eu tenha um modelo chamado TipoProduto, quero que seu plural seja TiposProduto e não TipoProdutos, como faz a pluralização do Rails.

Desde já grato pela atenção.

Sobre o uso de plural de uma olhada nesse link
http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/String/Inflections.html
e

talvez isso ajude, acredito que isso ajude também na sua nomemclatura.

é trabalhoso usar Rails fora do padrão dele.

Beleza, o uso da classe Inflector resolve tranquilo o problema do plural de nomes compostos. Mas não enxergo como ele resolve o problema da nomenclatura.

O padrão que a equipe de banco de dados usa é o seguinte:

  • os nomes dos objetos (tabelas, colunas) devem estar em maiúsculas;
  • concatena-se ao nome da coluna um mnemônico representando o tipo de dados da coluna.

Como exemplo, tomemos a tabela abaixo:

[code]USUARIO

  • ID_USUARIO
  • STR_NOME_USUARIO
    [/code]

Como mapear isso no model do Rails? Tentei usar os métodos set_table_name, set_primary_key… Mas quando rodo a migration, ele ainda cria os objetos seguindo o padrão do Rails.

Vê se é isso que vc precisa: http://api.rubyonrails.org/classes/ActiveRecord/Base.html#M001804

Olá dlt, obrigado pela ajuda mas como falei no post anterior, tentei usar esse método sem sucesso.

Oi, tnaires. Não tinha visto que vc já tinha tentado o set_table_name.

Acho que não entendi direito o seu problema. Pelo o que eu entendi, você precsa alterar o nome da tabela a ser criada na migration, usar um set_table_name no modelo criado e depois resolver os problemas de pluralizacão com inflectors.

Poderia descrever os passos que segue e os resultados que espera quando roda as migrations?

Nossa, realmente isso eu não tinha feito…

Tomemos como exemplo a tabela de usuários cuja estrutura mostrei num post anterior. Então preciso alterar o código da migration abaixo:

[code]create_table :usuarios do |t|
t.string nome

t.timestamps
end[/code]
Para isso?

[code]create_table :USUARIOS do |t|
t.string :STR_NOME_USUARIO

t.timestamps
end[/code]
Desculpe a ignorância :oops:, achei que se eu configurasse tudo no model o Rails também “traduzisse” a migration.

O arquivo da migration já tinha sido gerado quando vc usou o script/generate model e não é editado só porque vc chamou um método no modelo. :smiley:

Nossa, realmente isso eu não tinha feito…

Tomemos como exemplo a tabela de usuários cuja estrutura mostrei num post anterior. Então preciso alterar o código da migration abaixo:

[code]create_table :usuarios do |t|
t.string nome

t.timestamps
end[/code]
Para isso?

[code]create_table :USUARIOS do |t|
t.string :STR_NOME_USUARIO

t.timestamps
end[/code]
Desculpe a ignorância :oops:, achei que se eu configurasse tudo no model o Rails também “traduzisse” a migration.[/quote]

Na verdade não, o capslock não sever com SYMBOLS, vc tem que usar string mesmo aqlgo no estilo

[code]create_table “USUARIOS” do |t|
t.string “STR_NOME_USUARIO”

t.timestamps
end[/code]

vale ressaltar que você tera que criar a coluna ID_USUARIO manualmente também, por que o rails vai criar o campo somente id.

Funciona, sim.

Isso. E ainda tem que usar o set_primary_key no modelo.

Shame on me :oops:

Na verdade, não esperava que o Rails reescrevesse o código, e sim, associasse o símbolo :nome ao campo “STR_NOME_USUARIO”.

OK pessoal, obrigado. Farei alguns testes e depois postarei aqui o resultado.

Não da pra alterar a convençãode nomes de objetos do banco de dados, você vai ter que configurar o nome de cada coluna e cada tabela para cada entidade/model :frowning: