当我阅读“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”没有完成创建该实例变量的工作。但是,我可以验证此方法是否已执行,因为我可以设法成功访问用户的显示页面,前提是他没有任何微博。
在此步骤中,很难给出更多提示。但我可以说所有其他测试都在通过。
答案 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语法检查器。
无论如何,感谢其他人的建议。