Criando models com Ruby on Rails
Voltando ao Rails gostaria de compartilhar a criação dos models do meu novo projeto pessoal.
O primeiro passo é criar um projeto Rails como o que foi criado aqui.
O contexto utilizado será referente a uma publicação de um anúncio bem simplificado. E para isso será necessária a criação de três models: Usuário, Contato e Anúncio com as associações apresentadas na figura abaixo.
Entre na pasta do seu projeto Rails:
cd projetorails
Crie o model do Usuário:
rails g model usuario
O Rails criou uma migração inicial para o nosso model. Esta migração encontra-se na pasta db/migrate/<horário_da_criação>_create_usuarios.rb. Abra a migração criada para o model e adicione as colunas:
class CreateUsuarios < ActiveRecord::Migration
def self.up
create_table :usuarios do |t|
t.string :email, :limit => 50
t.string :senha, :limit => 20
t.string :nome, :limit => 50
t.string :CPF, :limit => 14
t.timestamps
end
end
def self.down
drop_table :usuarios
end
end
No terminal execute o comando abaixo para rodar a migração que criará a tabela de usuários:
rake db:migrate
Crie o model de Contato:
rails g model contato
Altere a migração db/migrate<horário_da_criação>_create_contatos.rb:
class CreateContatos < ActiveRecord::Migration
def self.up
create_table :contatos do |t|
t.string :telefone, :limit => 20
t.string :celular, :limit => 20
t.string :twitter, :limit => 50
t.string :facebook, :limit => 50
t.string :msn, :limit => 50
t.timestamps
end
end
def self.down
drop_table :contatos
end
end
No terminal execute o comando abaixo para rodar a migração que criará a tabela de contatos:
rake db:migrate
Crie o model para Anúncio:
rails g model anuncio
Altere a migração db/migrate<horário_da_criação>_create_anuncios.rb:
class CreateAnuncios < ActiveRecord::Migration
def self.up
create_table :anuncios do |t|
t.text :descricao, :limit => 2048
t.timestamps
end
end
def self.down
drop_table :anuncios
end
end
No terminal execute o comando abaixo para rodar a migração que criará a tabela de anúncios:
rake db:migrate
Quase pronto! Os models estão criados e você pode visualizar as tabelas através do plugin SQLite Manager para o Firefox. Mas ainda falta acrescentar as associações entre os models e entre as tabelas.
Vamos então associar o contato ao usuário. Edite o model Usuário que se encontra no diretório app/models/usuario.rb:
class Usuario < ActiveRecord::Base has_one :contato end
Agora edite o model Contato (app/models/contato.rb):
class Contato < ActiveRecord::Base belongs_to :usuario end
Esta associação nos diz que um usuário possui um contato. Sendo assim vamos criar uma migração para adicionar este relacionamento na tabela.
rails g migration add_column_contato_usuario
E edite a migração criada em db/migrate/<horário_da_criação>_add_column_contato_usuario.rb:
class AddColumnContatoUsuario < ActiveRecord::Migration
def self.up
add_column :usuarios, :contato_id, :integer
end
def self.down
remove_column :usuarios, :contato_id
end
end
No terminal execute o comando para gerar a migração de atualização da tabela de usuários:
rake db:migrate
E para finalizar vamos associar o anúncio ao usuário.
Edite o model Usuário(app/models/usuario.rb) para indicar que um usuário possui vários anúncios:
class Usuario < ActiveRecord::Base has_one :contato has_many :anuncios end
Edite também o model Anúncio(app/models/anuncio.rb) para afirmar que ele pertence a um usuário:
class Anuncio < ActiveRecord::Base belongs_to :usuario end
Crie a migração que irá adicionar o id do usuário ao anúncio:
rails g migration add_column_usuario_anuncio
Edite a migração db/migrate/<horário_da_criação>_add_column_usuario_anuncio.rb:
class AddColumnUsuarioAnuncio < ActiveRecord::Migration
def self.up
add_column :anuncios, :usuario_id, :intege
end
def self.down
remove_column :anuncios, :usuario_id
end
end
No terminal execute o comando para gerar a migração de atualização da tabela de anúncios:
rake db:migrate
Agora sim os models estão prontos para criarmos os testes e as validações, mas isto será assunto para o próximo post.
Para entender melhor o funcionamento dos models e suas associações não deixe de ler a apostila RR-71 da Caelum e a documentação da API ActiveRecord.
Até breve



Nenhum trackbacks ainda.