我正在阅读Rails教程。在我添加此代码的第11章
<% if @user.microposts.any? %>
<table class="microposts" summary= "User microposts">
<%= render @microposts %>
</table>
<%= will_paginate @microposts %>
<% end %>
我得到两个错误,如下所示
1) UsersController GET 'show' should show the user's microposts
Failure/Error: get :show, :id => @user
ActionView::Template::Error:
Missing partial microposts/micropost with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>[:html], :locale=>[:en, :en]} in view paths "/home/ruby/new_rails/rail_new_app/app/views"
# ./app/views/users/show.html.erb:10:in `_app_views_users_show_html_erb___4312949856623214655_35714500__2182421899600364460'
# ./spec/controllers/users_controller_spec.rb:100:in `block (3 levels) in <top (required)>'
2) UsersController GET 'show' should paginate microposts
Failure/Error: get :show, :id => @user
ActionView::Template::Error:
Missing partial microposts/micropost with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>[:html], :locale=>[:en, :en]} in view paths "/home/ruby/new_rails/rail_new_app/app/views"
请让我知道我哪里错了。
答案 0 :(得分:2)
Error: Missing partial microposts/micropost
这是因为<%= render @microposts %>
需要部分渲染微博集合,就像错误所说的那样。
警告:如果您只是提供一个对象并让rails自行确定部分,它将默认为:pluralized_model_name/_:singular_model_name
,在您的情况下为microposts/_micropost
。如果您希望rails为您的集合渲染另一个部分,则需要明确指定它; render partial: 'user/microposts', collection: @microposts
。
您只需要创建部分。并阅读错误消息,它们很有帮助。
答案 1 :(得分:-1)
听起来你已经解决了这个问题但是为了防止其他人通过Hartl教程并得到此错误,请参阅:
清单11.21:显示单个微帖的部分内容。
这是教程中创建文件的地方。
确保您创建的文件具有以下名称:
app/views/microposts/_micropost.html.erb
同时确保文件具有适当的内容。