title: Accessing parent object attribute from child's object in Rails
body: <p>I have a model called Category which looks like this:</p>
  
  <pre><code>class Category &lt; ActiveRecord::Base
    has_many :categories
    belongs_to :category,:foreign_key =&gt; "parent_id"
  end
  </code></pre>
  
  <p>I have a view which shows all the categories with some of their attributes.  I can access <code>category.parent_id</code>, but I would like to be able to do something like <code>category.parent_name</code>.<br>
  I can see myself creating a model method to fetch all categories and filling the collection with the correspondent parent name of each category, but I'm wondering if there is anyway to do this easily.  </p>
  
  <p><strong>EDIT:</strong> I have modified the model to have it like this:</p>
  
  <pre><code>class Category &lt; ActiveRecord::Base
    has_many :children, :class_name =&gt; 'Category', :foreign_key =&gt; 'parent_id'
    belongs_to :parent, :class_name =&gt; 'Category', :foreign_key =&gt; 'parent_id'
  end
  </code></pre>
  
  <p>The migration to create the table categories is like this:</p>
  
  <pre><code>class CreateCategories &lt; ActiveRecord::Migration
    def change
      create_table :categories do |t|
        t.string :name
        t.text :description
        t.integer :parent_id
  
        t.timestamps
      end
    end
  end
  </code></pre>
  
  <p>However when I pass a category object to a view I am not able to access its parent attributes by doing <code>category.parent.name</code> - Doing an <code>inspect</code> of that object gives me:</p>
  
  <pre><code>&lt;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"&gt;
  </code></pre>
  
  <p>And if I do an inspect of <code>category.parent</code> I get this:</p>
  
  <pre><code>#&lt;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"&gt;
  </code></pre>
  
  <p>However if I try to do <code>category.parent.name</code> I get the following error:</p>
  
  <pre><code>undefined method `name' for nil:NilClass
  </code></pre>
  
  <p>EDIT2: I was trying to access a parent that was nil before the object that I mentioned above.  Doing this:</p>
  
  <pre><code>category.parent.try(:name) 
  </code></pre>
  
  <p>as suggested by <strong>Michael Irwin</strong> in one of the answers solved it.</p>