Finalmente o primeiro post sobre Rails. Essa dica é muito legal e prática para quem quer fazer auto-relaciomento com Rails. Estou postando porque não foi tão fácil encontrar a solução. Para facilitar, vamos exemplificar:
Vamos supor que em nosso sistema (um blog, por exemplo) temos categorias. E categorias podem possuir categorias filhas. Temos aí um auto-relacionamento para fazer, certo ?
No Rails, isso é muito fácil. No esquema das migrations, deveríamos ter algo parecido com isso:
class CreateCategories < ActiveRecord::Migration def self.up create_table :categories do |t| t.string :name t.string :description t.integer :father_id end end def self.down drop_table :categories end end
A coluna father_id indica a o ID de uma categoria pai. Seria como uma Foreign Key. Agora precisamos definir o relacionamento no Model para que o Rails possa compreender a tabela que criamos.
class Category < ActiveRecord::Base has_many :children, :class_name => "Category", :foreign_key => "father_id" belongs_to :father, :class_name => "Category" end
Essas duas linhas de código significam o seguinte:
- A primeira linha, indica que Category tem filhos, utilizando o Model Category e chave estrangeira father_id;
- A segunda linha diz que o mesmo Model Category pertence a um Category, estabelecendo aí o auto-relacionamento.
A partir daí, você já pode brincar e descobrir os filhos de um Category pai usando @category.children. Para descobrir o pai de um Category, use @category.father.
Para quem quiser aprender mais sobre relacionamentos no Rails, acesse o Guia Rails, ainda na versão em Inglês. Em breve haverá uma versão em português. Assim que sair eu anunciarei por aqui.
