Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

General Discussion

NoMethodError -Simple Rails App

I'm getting the following error when trying to set up the user id's in the Simple Web App series.

NoMethodError in Statuses#index

Showing /Users/TomEllis/Projects/treebook/app/views/statuses/index.html.erb where line #9 raised:

undefined method `user' for nil:NilClass

I'm assuming it's something to do with the user id not being associated with the status. The odd thing is, it works fine on the 'show' status page with single statuses but on the index.html page, or 'all statuses', I get the error.

How can it work on one, but not the other?

Heres's the user.rb

class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable,
# :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
       :recoverable, :rememberable, :trackable, :validatable

# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me,
          :first_name, :last_name, :profile_name
# attr_accessible :title, :body

has_many :statuses

def full_name
  first_name + " " + last_name
end

end

and here's the index.html.erb

<div class="page-header"> <h1>All of the Statuses</h1> </div>

<%= link_to "Post a New Status", new_status_path, class: "btn btn-success" %>

<% @statuses.each do |status| %>
<div class="status">
  <strong><%= @status.user.full_name %></strong>
  <p><%= status.content %></p>
  <div class="meta">
    <%= link_to time_ago_in_words(status.created_at) + " ago", status %>
    <span class="admin">
      | <%= link_to "Edit", edit_status_path(status) %> |
      <%= link_to "Delete", status, method: :delete, data: { confirm: "Are you sure you want to delete this status?"} %>
    </span>
  </div> 
</div>

<% end %>

1 Answer

Ah I figured it out.

The erb for @status.user.full_name in the loop didn't need the leading '@', presumably because it had been passed in above.

All working!