我一直在关注 Michael Hartl 的 Rails 教程。实际上我已经完成了它,但是我在为最后一章的最后一个练习所做的一些重构时遇到了一些问题。我所做的只是改变用户模型(show.html.erb)的显示视图:
<section>
<h1>
<%= gravatar_for @user %>
<%= @user.name %>
</h1>
</section>
对此:
<section>
<%= render 'shared/user_info' %>
</section>
在部分(_user_info.html.erb)我有这个:
<a href="<%= user_path(current_user) %>">
<%= gravatar_for current_user, size: 52 %>
</a>
<h1> <%= current_user.name %> </h1>
<% unless current_page?(user_path(current_user)) %>
<span> <%= link_to "view my profile", current_user %> </span>
<span> <%= pluralize(current_user.microposts.count, "micropost") %> </span>
<% end %>
在浏览器上一切正常,但由于某种原因 rspec 未能通过某些测试,我怀疑 rspec 在调用 session_helper.rb 中定义的 current_user 方法时遇到问题,顺便说一下,该方法包含在 application_helper.rb 中。gravatar_for 函数在 users_helper.rb 中定义。这是我从测试中得到的错误:
失败/错误:在 { 访问 user_path(user) } ActionView::Template::Error: 未定义方法email' for nil:NilClass
# ./app/helpers/users_helper.rb:4:in
gravatar_for'_app_views_shared__user_info_html_erb___3480157814439046731_47327400'
# ./app/views/users/show.html.erb:5:in
之前/user_pages_spec.rb:58:in `block (3 levels) in '
如果您能帮助我确定这里发生了什么,我将不胜感激。我可以找到不同的方法来做同样的事情,但我对此非常好奇。我在 Rails 方面不是很有经验,这就是为什么我遵循本教程的原因,如果我遗漏了一些明显的东西,请原谅我。谢谢。