ruby-on-rails教程:无法显示用户的微博

时间:2011-08-21 01:31:27

标签: ruby-on-rails ruby-on-rails-3

当我阅读“Ruby on Rails 3 Tutorial”时,我试图弄清楚我在第11章中做错了什么,因为我无法通过11.15列表中的测试。

所以我在这里,坚持第11.2.1节。由于我无法使用它,我决定忽略它并继续前进:为前六个用户填充50个微博,然后尝试访问用户的显示页面。我收到了以下错误页面:

NoMethodError in Users#show

Showing <my_path>/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 %>

通过试验和错误,看起来实例变量@microposts由于某种原因是零。看起来方法“UsersController.show”没有完成创建该实例变量的工作。但是,我可以验证此方法是否已执行,因为我可以设法成功访问用户的显示页面,前提是他没有任何微博。

在此步骤中,很难给出更多提示。但我可以说所有其他测试都在通过。

3 个答案:

答案 0 :(得分:1)

尝试用@ user.microposts替换所有出现的@microposts。

你的控制器动作中是否定义了@microposts?或者在控制器操作中定义了@user?因为似乎@ user.microposts可能与@microposts(来自此上下文)相同,除非您为关联的user.microposts对象声明了变量,否则您可能正在尝试访问不存在的变量。

答案 1 :(得分:0)

可能是@user.microposts吗?它在第8行检查是否存在?

答案 2 :(得分:0)

嗯,有了这些类型的错误,某个地方就会出现一个愚蠢的错误。

遵循ruby.railstutorial.org网站的建议。我确实将我的代码与作者的代码进行了比较。猜猜看,在我的UsersController版本中,有两个'show'方法的定义!而第二个实例位于文件的底部,没有对@microposts实例变量进行任何赋值。

我是否必须编译该东西,该错误将被发现。我想必须有一种方法来扫描rails网站上的ruby语法检查器。

无论如何,感谢其他人的建议。