Tengo un modelo llamado Categoría que se parece a esto:Acceso objeto principal atributo de objeto del niño en los carriles
class Category < ActiveRecord::Base
has_many :categories
belongs_to :category,:foreign_key => "parent_id"
end
tengo una vista que muestra todas las categorías con algunos de sus atributos. Puedo acceder al category.parent_id
, pero me gustaría poder hacer algo como category.parent_name
.
Me veo creando un método modelo para buscar todas las categorías y completar la colección con el nombre principal correspondiente de cada categoría, pero me pregunto si hay alguna forma de hacerlo fácilmente.
EDIT: He modificado el modelo para tener de esta manera:
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
La migración para crear las categorías de la tabla es la siguiente:
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
Sin embargo cuando paso una categoría objetar a una vista No puedo acceder a sus atributos principales haciendo category.parent.name
- Haciendo un inspect
de ese objeto me da:
<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">
Y si no un inspeccionar de category.parent
me sale esto:
#<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">
Sin embargo, si intento hacer category.parent.name
me sale el siguiente error:
undefined method `name' for nil:NilClass
Edit2: yo estaba tratando de acceder a un padre que era nulo antes del objeto que mencioné anteriormente. Hacer esto:
category.parent.try(:name)
como sugiere Michael Irwin en una de las respuestas resuelto.
davidb gracias por la respuesta. ¿Por qué declaras dos claves externas con el mismo nombre en la asociación has_many y belongs_to? – Nobita
Es una clave foránea pero se ve desde dos lados diferentes ... – davidb
He explicado mi problema un poco más con las modificaciones sugeridas. Veamos si me doy cuenta de lo que estoy haciendo mal ... – Nobita