失败/错误:get:show,:id => @用户

时间:2011-09-21 08:21:34

标签: ruby-on-rails ruby

我正在阅读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"

请让我知道我哪里错了。

2 个答案:

答案 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

同时确保文件具有适当的内容。