Acessando o atributo de objeto pai do objeto filho no Rails
Eu tenho um modelo chamado Category, que se parece com isso:
class Category < ActiveRecord::Base
has_many :categories
belongs_to :category,:foreign_key => "parent_id"
end
Tenho uma visão que mostra todas as categorias com alguns de seus atributos. Eu posso acessarcategory.parent_id
, mas gostaria de poder fazer algo comocategory.parent_name
.
Eu posso me ver criando um método de modelo para buscar todas as categorias e preenchendo a coleção com o nome pai correspondente de cada categoria, mas estou pensando se há alguma maneira de fazer isso facilment
EDITAR Modifiquei o modelo para tê-lo assim:
class Category < ActiveRecord::Base
has_many :children, :class_name => 'Category', :foreign_key => 'parent_id'
belongs_to :parent, :class_name => 'Category', :foreign_key => 'parent_id'
end
A migração para criar as categorias da tabela é assim:
class CreateCategories < ActiveRecord::Migration
def change
create_table :categories do |t|
t.string :name
t.text :description
t.integer :parent_id
t.timestamps
end
end
end
No entanto, quando passo um objeto de categoria para uma visualização, não consigo acessar seus atributos pai executandocategory.parent.name
- Fazendo uminspect
desse objeto me dá:
<Category id: 2, name: "Test 2", description: "Prova 2", parent_id: 1, created_at: "2012-01-17 19:28:33", updated_at: "2012-01-17 19:28:33">
E se eu fizer uma inspeção decategory.parent
Eu entendi isso
#<Category id: 1, name: "Prova", description: "Test", parent_id: nil, created_at: "2012-01-17 19:28:17", updated_at: "2012-01-17 19:28:17">
No entanto, se eu tentar fazercategory.parent.name
Estou tendo o erro a seguir
undefined method `name' for nil:NilClass
EDIT2: Eu estava tentando acessar um pai que era nulo antes do objeto que eu mencionei acima. Fazendo isso
category.parent.try(:name)
como sugerido porMichael Irwin em uma das respostas resolvida