views:

46

answers:

1

I'm following the rails tutorial @ http://railstutorial.org

On chapter 11, I'm having issues with showing microposts from users.

Based on the tutorial, the RSPEC test should pass. However, it fails


 1) UsersController GET 'show' should show the user's microposts
 Failure/Error: get :show, :id => @user
 undefined method `model_name' for NilClass:Class
 # ./app/views/users/show.html.erb:10:in `_app_views_users_show_html_erb__49
 # ./spec/controllers/users_controller_spec.rb:71

When I try to access a user's page which has microposts associated with it, I get an exception :

NoMethodError in Users#show

Showing C:/Documents and Settings/XXXXX/workspace/sample_app/app/views/users/show.html.erb where line #10 raised:

undefined method `model_name' for NilClass:Class
Extracted source (around line #10):

7:       </h1>
8:       <% unless @user.microposts.empty? %>
9:         <table class="microposts" summary="User microposts">
10:           <%= render @microposts %>
11:         </table>
12:         <%= will_paginate @microposts %>
13:       <% end %>
Rails.root: C:/Documents and Settings/XXXXX/workspace/sample_app

Application Trace | Framework Trace | Full Trace
actionpack (3.0.0) lib/action_view/render/partials.rb:319:in `partial_path'
actionpack (3.0.0) lib/action_view/render/partials.rb:207:in `setup'
actionpack (3.0.0) lib/action_view/render/partials.rb:186:in `initialize'
actionpack (3.0.0) lib/action_view/render/partials.rb:331:in `new'
actionpack (3.0.0) lib/action_view/render/partials.rb:331:in `_render_partial'
actionpack (3.0.0) lib/action_view/render/rendering.rb:31:in `render'
app/views/users/show.html.erb:10:in `_app_views_users_show_html_erb__49899798_36559632_0'
actionpack (3.0.0) lib/action_view/template.rb:135:in `send'
actionpack (3.0.0) lib/action_view/template.rb:135:in `render'
activesupport (3.0.0) lib/active_support/notifications.rb:54:in `instrument'
actionpack (3.0.0) lib/action_view/template.rb:127:in `render'
actionpack (3.0.0) lib/action_view/render/rendering.rb:59:in `_render_template'
activesupport (3.0.0) lib/active_support/notifications.rb:52:in `instrument'
activesupport (3.0.0) lib/active_support/notifications/instrumenter.rb:21:in `instrument'
activesupport (3.0.0) lib/active_support/notifications.rb:52:in `instrument'
actionpack (3.0.0) lib/action_view/render/rendering.rb:56:in `_render_template'
actionpack (3.0.0) lib/action_view/render/rendering.rb:26:in `render'
actionpack (3.0.0) lib/abstract_controller/rendering.rb:114:in `_render_template'
actionpack (3.0.0) lib/abstract_controller/rendering.rb:108:in `render_to_body'
actionpack (3.0.0) lib/action_controller/metal/renderers.rb:47:in `render_to_body'
actionpack (3.0.0) lib/action_controller/metal/compatibility.rb:55:in `render_to_body'
actionpack (3.0.0) lib/abstract_controller/rendering.rb:101:in `render_to_string'
actionpack (3.0.0) lib/abstract_controller/rendering.rb:92:in `render'
actionpack (3.0.0) lib/action_controller/metal/rendering.rb:17:in `render'
actionpack (3.0.0) lib/action_controller/metal/instrumentation.rb:40:in `render'
activesupport (3.0.0) lib/active_support/core_ext/benchmark.rb:5:in `ms'
c:/Ruby187/lib/ruby/1.8/benchmark.rb:308:in `realtime'
activesupport (3.0.0) lib/active_support/core_ext/benchmark.rb:5:in `ms'
actionpack (3.0.0) lib/action_controller/metal/instrumentation.rb:40:in `render'
actionpack (3.0.0) lib/action_controller/metal/instrumentation.rb:78:in `cleanup_view_runtime'
activerecord (3.0.0) lib/active_record/railties/controller_runtime.rb:15:in `cleanup_view_runtime'
actionpack (3.0.0) lib/action_controller/metal/instrumentation.rb:39:in `render'
actionpack (3.0.0) lib/action_controller/metal/implicit_render.rb:10:in `default_render'
actionpack (3.0.0) lib/action_controller/metal/implicit_render.rb:5:in `send_action'
actionpack (3.0.0) lib/abstract_controller/base.rb:150:in `process_action'
actionpack (3.0.0) lib/action_controller/metal/rendering.rb:11:in `process_action'
actionpack (3.0.0) lib/abstract_controller/callbacks.rb:18:in `process_action'
activesupport (3.0.0) lib/active_support/callbacks.rb:435:in `_run__434435962__process_action__453433196__callbacks'
activesupport (3.0.0) lib/active_support/callbacks.rb:409:in `send'
activesupport (3.0.0) lib/active_support/callbacks.rb:409:in `_run_process_action_callbacks'
activesupport (3.0.0) lib/active_support/callbacks.rb:93:in `send'
activesupport (3.0.0) lib/active_support/callbacks.rb:93:in `run_callbacks'
actionpack (3.0.0) lib/abstract_controller/callbacks.rb:17:in `process_action'
actionpack (3.0.0) lib/action_controller/metal/instrumentation.rb:30:in `process_action'
activesupport (3.0.0) lib/active_support/notifications.rb:52:in `instrument'
activesupport (3.0.0) lib/active_support/notifications/instrumenter.rb:21:in `instrument'
activesupport (3.0.0) lib/active_support/notifications.rb:52:in `instrument'
actionpack (3.0.0) lib/action_controller/metal/instrumentation.rb:29:in `process_action'
actionpack (3.0.0) lib/action_controller/metal/rescue.rb:17:in `process_action'
actionpack (3.0.0) lib/abstract_controller/base.rb:119:in `process'
actionpack (3.0.0) lib/abstract_controller/rendering.rb:40:in `process'
actionpack (3.0.0) lib/action_controller/metal.rb:133:in `dispatch'
actionpack (3.0.0) lib/action_controller/metal/rack_delegation.rb:14:in `dispatch'
actionpack (3.0.0) lib/action_controller/metal.rb:173
actionpack (3.0.0) lib/action_dispatch/routing/route_set.rb:62:in `call'
actionpack (3.0.0) lib/action_dispatch/routing/route_set.rb:62:in `dispatch'
actionpack (3.0.0) lib/action_dispatch/routing/route_set.rb:27:in `call'
rack-mount (0.6.13) lib/rack/mount/route_set.rb:148:in `call'
rack-mount (0.6.13) lib/rack/mount/code_generation.rb:93:in `recognize'
rack-mount (0.6.13) lib/rack/mount/code_generation.rb:82:in `optimized_each'
rack-mount (0.6.13) lib/rack/mount/code_generation.rb:92:in `recognize'
rack-mount (0.6.13) lib/rack/mount/route_set.rb:139:in `call'
actionpack (3.0.0) lib/action_dispatch/routing/route_set.rb:492:in `call'
actionpack (3.0.0) lib/action_dispatch/middleware/best_standards_support.rb:17:in `call'
actionpack (3.0.0) lib/action_dispatch/middleware/head.rb:14:in `call'
rack (1.2.1) lib/rack/methodoverride.rb:24:in `call'
actionpack (3.0.0) lib/action_dispatch/middleware/params_parser.rb:21:in `call'
actionpack (3.0.0) lib/action_dispatch/middleware/flash.rb:182:in `call'
actionpack (3.0.0) lib/action_dispatch/middleware/session/abstract_store.rb:149:in `call'
actionpack (3.0.0) lib/action_dispatch/middleware/cookies.rb:287:in `call'
activerecord (3.0.0) lib/active_record/query_cache.rb:32:in `call'
activerecord (3.0.0) lib/active_record/connection_adapters/abstract/query_cache.rb:28:in `cache'
activerecord (3.0.0) lib/active_record/query_cache.rb:12:in `cache'
activerecord (3.0.0) lib/active_record/query_cache.rb:31:in `call'
activerecord (3.0.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:355:in `call'
actionpack (3.0.0) lib/action_dispatch/middleware/callbacks.rb:46:in `call'
activesupport (3.0.0) lib/active_support/callbacks.rb:415:in `_run_call_callbacks'
actionpack (3.0.0) lib/action_dispatch/middleware/callbacks.rb:44:in `call'
rack (1.2.1) lib/rack/sendfile.rb:107:in `call'
actionpack (3.0.0) lib/action_dispatch/middleware/remote_ip.rb:48:in `call'
actionpack (3.0.0) lib/action_dispatch/middleware/show_exceptions.rb:46:in `call'
railties (3.0.0) lib/rails/rack/logger.rb:13:in `call'
rack (1.2.1) lib/rack/runtime.rb:17:in `call'
activesupport (3.0.0) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
rack (1.2.1) lib/rack/lock.rb:11:in `call'
rack (1.2.1) lib/rack/lock.rb:11:in `synchronize'
rack (1.2.1) lib/rack/lock.rb:11:in `call'
actionpack (3.0.0) lib/action_dispatch/middleware/static.rb:30:in `call'
railties (3.0.0) lib/rails/application.rb:168:in `call'
railties (3.0.0) lib/rails/application.rb:77:in `send'
railties (3.0.0) lib/rails/application.rb:77:in `method_missing'
railties (3.0.0) lib/rails/rack/log_tailer.rb:14:in `call'
rack (1.2.1) lib/rack/content_length.rb:13:in `call'
rack (1.2.1) lib/rack/handler/webrick.rb:52:in `service'
c:/Ruby187/lib/ruby/1.8/webrick/httpserver.rb:104:in `service'
c:/Ruby187/lib/ruby/1.8/webrick/httpserver.rb:65:in `run'
c:/Ruby187/lib/ruby/1.8/webrick/server.rb:173:in `start_thread'
c:/Ruby187/lib/ruby/1.8/webrick/server.rb:162:in `start'
c:/Ruby187/lib/ruby/1.8/webrick/server.rb:162:in `start_thread'
c:/Ruby187/lib/ruby/1.8/webrick/server.rb:95:in `start'
c:/Ruby187/lib/ruby/1.8/webrick/server.rb:92:in `each'
c:/Ruby187/lib/ruby/1.8/webrick/server.rb:92:in `start'
c:/Ruby187/lib/ruby/1.8/webrick/server.rb:23:in `start'
c:/Ruby187/lib/ruby/1.8/webrick/server.rb:82:in `start'
rack (1.2.1) lib/rack/handler/webrick.rb:13:in `run'
rack (1.2.1) lib/rack/server.rb:213:in `start'
railties (3.0.0) lib/rails/commands/server.rb:65:in `start'
railties (3.0.0) lib/rails/commands.rb:30
railties (3.0.0) lib/rails/commands.rb:27:in `tap'
railties (3.0.0) lib/rails/commands.rb:27
script/rails:6:in `require'
script/rails:6
Request

Parameters:

{"id"=>"1"}
Show session dump

Show env dump

Response

Headers:

None

I've tried to find someone with similar issues, but to no avail.

I've recopied the whole code for this chapter form the tutorial to make sure it wasn't a typo, still didn't helped.

Thanks for any help given.

+1  A: 

I was having the same problem... took a while to figure out. I had two instances of the show method defined in the UsersController. Once I removed the one that didn't contain a @microposts declaration, (2nd one didn't have @microposts) the tests ran as expected and the page rendered the microposts correctly.

Cheers! a

alphanumericone
That was exactly the issue. Now I can see where its coming from.On the previous chapters, when I defined the show method, the example of the tutorial had put the method towards the end of the code, whereas in chapter 11, it puts it at the beginning.So despite my numerous cut/paste I was just replacing the duplicate method, not the original.Thanks a lot !
Dave