Auto-relacionamento em Rails

Posted March 19th, 2009 in Desenvolvimento by felipepavao

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.

Blog sobre Rails, Django e internet

Posted March 11th, 2009 in Projetos by felipepavao

Como sabem, sou a pessoa  responsável pelo projeto BlogFactory e pelas postagem no Blog da Fábrica. E ultimamente, por estar estudando muitas tecnologias diferentes, senti a necessidade de registrar minhas observações e compartilhar com a comunidade esse conhecimento. Surgiu então o StartAPP.org com layout simples e objetivo. Optamos por utilizar um layout padrão encontrado no repositório do WordPress para que a ideia deste novo projeto não ficasse na gaveta. Mas já estamos trabalhando em algumas customizações para dar uma identidade visual única ao projeto.

Portanto, quem tiver interesse em trocar ideias sobre software, internet, Rails, Django, não deixe de conferir o StartAPP.org.

Página 2 de 212