Доступ к атрибуту родительского объекта из дочернего объекта в Rails
У меня есть модель под названием Категория, которая выглядит следующим образом:
class Category < ActiveRecord::Base
has_many :categories
belongs_to :category,:foreign_key => "parent_id"
end
У меня есть представление, которое показывает все категории с некоторыми их атрибутами. Я могу получить доступcategory.parent_id
, но я хотел бы иметь возможность сделать что-то вродеcategory.parent_name
.
Я вижу себя создающим модельный метод для извлечения всех категорий и заполнения коллекции соответствующим родительским именем каждой категории, но мне интересно, есть ли способ сделать это легко.
РЕДАКТИРОВАТЬ: Я изменил модель, чтобы она была такой:
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
Миграция для создания категорий таблиц выглядит следующим образом:
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
Однако, когда я передаю объект категории в представление, я не могу получить доступ к его родительским атрибутам, выполнивcategory.parent.name
- Делатьinspect
этого объекта дает мне:
<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">
И если я проверюcategory.parent
Я получаю это:
#<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">
Однако если я попытаюсь сделатьcategory.parent.name
Я получаю следующую ошибку:
undefined method `name' for nil:NilClass
РЕДАКТИРОВАТЬ 2: Я пытался получить доступ к родителю, который был ноль до объекта, который я упомянул выше. Делая это:
category.parent.try(:name)
как предложеноМайкл Ирвин в одном из ответов это решено.