Forum: Ruby on Rails Nil object for nested resource

Announcement (2017-05-07): is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see and for other Rails- und Ruby-related community platforms.
Matthew L. (Guest)
on 2007-06-19 18:19
Hi all,

I have 2 models with a standard 1 to many relationship.  I'm also using
REST on the two models and have added the appropriate code to the
routes.rb file.

class Scorecard < ActiveRecord::Base
  has_many :attributes

class Attribute < ActiveRecord::Base
  belongs_to :scorecard

map.resources :scorecards do |scorecard|
  scorecard.resources :attributes

My problem is that I want to show a single scorecard with all it's
attributes.  I then want to display a "New attribute" link to add a new
attribute to the current scorecard.

<%= label_for("scorecard") %>
<%=h %><br />

<%= label_for("template") %>
<%=h @scorecard.template %>

<% for attribute in @scorecard.attributes %>
    <td><%=h %></td>
    <td><%=h attribute.weight %></td>
<% end %>
<%= link_to "New Attribute", new_attribute_path(@scorecard) %>

However I get the message for line 17 (last line) when I try to view
this page,

You have a nil object when you didn't expect it!
The error occurred while evaluating nil.to_sym

I have tried checking against various REST and Rails books and articles,
and I thought I had used the correct syntax for creating a link to a new
attribute from this scorecard.

Any help on this would be greatly appreciated.


jparker (Guest)
on 2007-06-20 23:26
(Received via mailing list)
I think you may need to rename your Attribute model. ActiveRecord
objects already have an instance variable named "attributes" which
holds the attributes for the given model instance. The Scorecard's
has_many :attributes collection and the pre-existing attributes hash
are probably colliding.


On Jun 19, 7:19 am, Matthew L. <removed_email_address@domain.invalid>
Matthew L. (Guest)
on 2007-06-21 14:12
(Received via mailing list)
Problem solved!

In the routes.rb file I had the following

map.resources :scorecards do |scorecard|
  scorecard.resources :perspectives

map.resources :perspectives do |perspective|
  perspective.resources: scores

when I should have had

map.resources :scorecards do |scorecard|
  scorecard.resources :perspectives do |perspective|
    perspective.resources :score


This topic is locked and can not be replied to.