Forum: Ruby on Rails Nil object for nested resource

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community 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.

scorecard.rb:
class Scorecard < ActiveRecord::Base
  has_many :attributes
end

attribute.rb:
class Attribute < ActiveRecord::Base
  belongs_to :scorecard
end

routes.rb:
map.resources :scorecards do |scorecard|
  scorecard.resources :attributes
end

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.

scorecards/show.rhtml:
<%= label_for("scorecard") %>
<%=h @scorecard.name %><br />

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

<b>Attributes:</b>
<table>
<% for attribute in @scorecard.attributes %>
  <tr>
    <td><%=h attribute.name %></td>
    <td><%=h attribute.weight %></td>
  </tr>
<% end %>
</table>
<%= 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.

Thanks,

Matthew
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.

-John

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
end

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

when I should have had

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


Thanks,

Matthew
This topic is locked and can not be replied to.