Ruby on Rails - registros ativos
Rails Active Record é a camada Object / Relational Mapping (ORM) fornecida com Rails. Ele segue de perto o modelo ORM padrão, que é o seguinte -
- tabelas mapeiam para classes,
- linhas mapeiam para objetos e
- colunas mapeiam para atributos de objeto.
Os registros ativos do Rails fornecem uma interface e ligação entre as tabelas em um banco de dados relacional e o código do programa Ruby que manipula os registros do banco de dados. Os nomes dos métodos Ruby são gerados automaticamente a partir dos nomes dos campos das tabelas do banco de dados.
Cada objeto Active Record tem CRUD (Create, Read, Update, e Delete) métodos para acesso ao banco de dados. Essa estratégia permite designs simples e mapeamentos diretos entre tabelas de banco de dados e objetos de aplicativo.
Traduzir um modelo de domínio em SQL
Traduzir um modelo de domínio em SQL é geralmente simples, contanto que você se lembre de que precisa escrever um SQL compatível com Rails. Em termos práticos, você deve seguir certas regras -
Cada entidade (como um livro) obtém uma tabela no banco de dados com o seu nome, mas no plural (livros).
Cada uma dessas tabelas de correspondência de entidades tem um campo chamado id , que contém um número inteiro exclusivo para cada registro inserido na tabela.
Dadas a entidade xe a entidade y, se a entidade y pertencer à entidade x, então a tabela y tem um campo chamado x_id.
A maior parte dos campos em qualquer tabela armazena os valores das propriedades simples daquela entidade (qualquer coisa que seja um número ou uma string).
Criação de arquivos Active Record (modelos)
Para criar os arquivos Active Record para nossas entidades para o aplicativo de biblioteca, apresentado no capítulo anterior, emita o seguinte comando no nível superior do diretório do aplicativo.
library\> rails script/generate model Book
library\> rails script/generate model Subject
Acima rails generate model book comandos geram o código automático conforme abaixo -
Você está dizendo ao gerador para criar modelos chamados Livro e Assunto para armazenar instâncias de livros e assuntos. Observe que você está colocando em maiúscula Livro e Assunto e usando a forma singular. Este é um paradigma Rails que você deve seguir toda vez que criar um modelo.
Quando você usa a ferramenta de geração, o Rails cria o arquivo de modelo real que contém todos os métodos exclusivos do modelo e as regras de negócios que você define, um arquivo de teste de unidade para realizar o desenvolvimento orientado a teste, um arquivo de dados de amostra (chamado acessórios) para usar com os testes de unidade e uma migração Rails que facilita a criação de tabelas e colunas de banco de dados.
Além de criar muitos outros arquivos e diretórios, isso criará arquivos chamados book.rb e subject.rb contendo uma definição de esqueleto no app/models diretório.
Conteúdo disponível em book.rb -
class Book < ActiveRecord::Base
end
Conteúdo disponível em subject.rb -
class Subject < ActiveRecord::Base
end
Criando Associações entre Modelos
Quando você tem mais de um modelo em sua aplicação rails, você precisa criar uma conexão entre esses modelos. Você pode fazer isso por meio de associações. O Active Record suporta três tipos de associações -
one-to-one- Uma relação um para um existe quando um item tem exatamente um de outro item. Por exemplo, uma pessoa faz exatamente um aniversário ou um cachorro tem exatamente um dono.
one-to-many- Existe uma relação um-para-muitos quando um único objeto pode ser membro de muitos outros objetos. Por exemplo, um assunto pode ter muitos livros.
many-to-many - Um relacionamento muitos para muitos existe quando o primeiro objeto está relacionado a um ou mais de um segundo objeto, e o segundo objeto está relacionado a um ou mais do primeiro objeto.
Você indica essas associações adicionando declarações aos seus modelos: has_one, has_many, belongs_to e has_and_belongs_to_many.
Agora, você precisa dizer ao Rails quais relacionamentos você deseja estabelecer dentro do sistema de dados da biblioteca. Para fazer isso, modifique book.rb e subject.rb para ficarem assim -
class Book < ActiveRecord::Base
belongs_to :subject
end
Usamos um assunto singular no exemplo acima, porque um livro pode pertencer a um único assunto.
class Subject < ActiveRecord::Base
has_many :books
end
Usamos livros plurais aqui, porque um assunto pode ter vários livros.
Implementando validações em modelos
A implementação das validações é feita em um modelo Rails. Os dados que você está inserindo no banco de dados são definidos no modelo Rails real, então só faz sentido definir quais dados válidos implicam no mesmo local.
As validações são -
- O valor do campo de título não deve ser NULL.
- O valor do campo de preço deve ser numérico.
Abrir book.rb no app\model subdiratário e colocar as seguintes validações -
class Book < ActiveRecord::Base
belongs_to :subject
validates_presence_of :title
validates_numericality_of :price, :message=>"Error Message"
end
validates_presence_of - protege os campos "NOT NULL" contra a falta de entrada do usuário.
validates_numericality_of - impede o usuário de inserir dados não numéricos.
Além das validações mencionadas acima, existem outras validações comuns. Verifique o Guia Rápido do Rails .
O que vem a seguir?
No próximo capítulo, aprenderemos Migração Rails, que permite usar Ruby para definir mudanças no esquema do seu banco de dados, tornando possível usar um sistema de controle de versão para manter as coisas sincronizadas com o código real.