As várias declarações de associações especificam o que se precisa para relacionamento entre tabelas. Elas acrescentam cada uma, uma série de métodos para o model, que ajudam a navegar entre objetos ligados. Vamos analisar estes em mais detalhe, no âmbito dos três tipos diferentes de intertable ligação.
O Active Record do rails suporta três tipos de relações entre as tabelas:
Um-para-um, um-para-muitos, e muitos para muitos. Você indicar estes relacionamentos adicionanado os seguintes métodos aos seus models:
has_one,
has_many;
belongs_to;
has_and_belongs_to_many;
1) Relacionamento um-para-um
Este relacionamento poderá existir entre encomendas e faturas, por exemplo: para cada
encomenda há, no máximo, uma fatura. Nós declaramos por dizer isto em Rails:
class Order < ActiveRecord::Base has_one :invoice class Invoice < ActiveRecord::Base belongs_torder
Dica: belongs_to sempre fica na chave estrangeira.
2) Relacionamento um-para-muitos
Encomendas e linhas de itens têm um relacionamento um-para-muitos: pode haver qualquer um-para-muitos número de linhas de itens associados a uma encomenda particular. No Rails, para isso, temos o seguinte código:
class Order < ActiveRecord::Base has_many :line_items class LineItem < ActiveRecord::Base belongs_torder
Dica: has_many sempre fica no plural.
3) Relacionamentos muitos-para-muitos
Podemos classificar os nossos produtos. Um produto pode pertencer a várias categorias,
e cada categoria pode conter vários produtos. Este é um exemplo de relacionamento de muitos-para-muitos, expresso no Rails da seguinte forma:
class Product < ActiveRecord::Base has_and_belongs_to_many :categories class Category < ActiveRecord::Base has_and_belongs_to_many :products
Finalizando os relacionamentos: Inserir campo de ligação nas tabelas “filhas”:
Não podemos nos esquecer que para finalizar e fechar o relacionamentos definidos nos models, devemos inserir nas tabelas “filhas”, um campo de referencia de acordo com a convenção do rails para que ele entenda que aquele campo é o campo de ligação.Por convenção este campo deve ter o nome do model seguido do sufixo _id, ou seja por exemplo, para um model Product, o campo de ligação teria que se chamar product_id. Basta apenas fazer isso, o resto deixe por conta de nosso querido rails.
Lembrete: Isto também pode ser feito na migration, através do código t.reference.


