I am around page 329 when I noticed this error. It seems like it is not happy with my user login information. This error appears when I try to view the “upcoming stories” page.
NoMethodError in Stories#bin
Showing app/views/stories/_story.html.erb where line #4 raised:
You have a nil object when you didn't expect it!
The error occurred while evaluating nil.login
Extracted source (around line #4):
1: <% div_for(story) do %>
2: <h3><%= link_to story.name, story %></h3>
4: Submitted by: <%= story.user.login %> |
5: Score: <%= story.votes_count %>
7: <% end %>
Trace of template inclusion: app/views/stories/index.html.erb
Application Trace | Framework Trace | Full Trace
If you look at the stack trace at the bottom it’s leading you towards the problem:
stories_controller.rb - line 24, it’s trying to load the bin method, but it’s not finding it.
What does your stories_controller.rb look like?
fetch_stories 'votes_count < 5'
render :action => 'index'
@stories = Story.find :all,
:order => 'id DESC',
:conditions => conditions
That is the line 24 which is calling index. Index.rhtml is
<%= story_list_heading %></h2>
<%= render :partial => @stories %>
Actually, it’s my bad, I was in a hurry (had just finished work) and misinterpreted the error message.
It’s trying to load a method on line 4 of your _story.html.erb partial, that it can’t find.
Thanks for the help. The code is in my first post. I checked it and it appears correct to me. Any other ideas?
The problem is that story.user is returning a nil object. When Ruby then looks for the method ‘login’ on the object returned by story.user it can’t find that method - the nil object doesn’t have one.
Basically, the error means you don’t have a user associated to the story. This could happen because of one of the following:
- No user has been assigned to the story
- The user that was assigned to the story has been deleted or altered in a way that broke the association.
- The code that associates users with with stories is broken.
You could handle the problem by altering line 4 to:
Submitted by: <%= story.user ? story.user.login : 'unknown' -%> |
Alternatively add code to ensure that a user is always associated with a story.