Rails Tutorial - ошибка главы 11.3.2 (листинг 11.27) - PullRequest
0 голосов
/ 28 августа 2011

Я просматриваю книгу railstutorial.org, и после добавления переменной экземпляра micropost в app / controllers / pages_controller.rb домашняя страница моего приложения не отображается и вместо этого выдает следующую ошибку (в браузере):

ActionView::MissingTemplate in Pages#home

Showing /app/views/pages/home.html.erb where line #9 raised:

Missing partial shared/user_info with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>[:html], :locale=>[:en, :en]} in view paths "/app/views"
Extracted source (around line #9):

6:         <%= render 'shared/micropost_form' %>
7:       </td>
8:       <td class="sidebar round">
9:         <%= render 'shared/user_info' %>
10:       </td>
11:     </tr>
12:   </table>
Rails.root: /home/panos/sites/sample_app

Application Trace | Framework Trace | Full Trace
app/views/pages/home.html.erb:9:in `_app_views_pages_home_html_erb__134372853_79989310__180950044'

Rspec выдает мне следующие ошибки:

Failures:

  1) MicropostsController POST 'create' failure should not create a micropost
     Failure/Error: post :create, :micropost => @attr
     ActionView::Template::Error:
       Missing partial shared/user_info with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>[:html], :locale=>[:en, :en]} in view paths "/home/panos/sites/sample_app/app/views"
     # ./app/views/pages/home.html.erb:9:in `_app_views_pages_home_html_erb__186087139_72921610__1052842684'
     # ./app/controllers/microposts_controller.rb:10:in `create'
     # ./spec/controllers/microposts_controller_spec.rb:33:in `block (5 levels) in <top (required)>'
     # ./spec/controllers/microposts_controller_spec.rb:32:in `block (4 levels) in <top (required)>'

  2) MicropostsController POST 'create' failure should render the home page
     Failure/Error: post :create, :micropost => @attr
     ActionView::Template::Error:
       Missing partial shared/user_info with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>[:html], :locale=>[:en, :en]} in view paths "/home/panos/sites/sample_app/app/views"
     # ./app/views/pages/home.html.erb:9:in `_app_views_pages_home_html_erb__186087139_72921610__1052842684'
     # ./app/controllers/microposts_controller.rb:10:in `create'
     # ./spec/controllers/microposts_controller_spec.rb:38:in `block (4 levels) in <top (required)>'

  3) UsersController GET 'new' should be successful
     Failure/Error: get :new
     ActionView::Template::Error:
       undefined local variable or method `object' for #<#<Class:0xa89d8ac>:0xaa3a174>
     # ./app/views/shared/_error_messages.html.erb:1:in `_app_views_shared__error_messages_html_erb__638819034_88046780__702891636'
     # ./app/views/users/new.html.erb:4:in `block in _app_views_users_new_html_erb__995846824_89246620__1052842684'
     # ./app/views/users/new.html.erb:3:in `_app_views_users_new_html_erb__995846824_89246620__1052842684'
     # ./spec/controllers/users_controller_spec.rb:102:in `block (3 levels) in <top (required)>'

  4) UsersController GET 'new' should have the right title
     Failure/Error: get :new
     ActionView::Template::Error:
       undefined local variable or method `object' for #<#<Class:0xa89d8ac>:0xaa08ae8>
     # ./app/views/shared/_error_messages.html.erb:1:in `_app_views_shared__error_messages_html_erb__638819034_88046780__702891636'
     # ./app/views/users/new.html.erb:4:in `block in _app_views_users_new_html_erb__995846824_89246620__1052842684'
     # ./app/views/users/new.html.erb:3:in `_app_views_users_new_html_erb__995846824_89246620__1052842684'
     # ./spec/controllers/users_controller_spec.rb:107:in `block (3 levels) in <top (required)>'

  5) UsersController POST 'create' failure should not create a user
     Failure/Error: post :create, :user => @attr
     ActionView::Template::Error:
       undefined local variable or method `object' for #<#<Class:0xa89d8ac>:0xa99271c>
     # ./app/views/shared/_error_messages.html.erb:1:in `_app_views_shared__error_messages_html_erb__638819034_88046780__702891636'
     # ./app/views/users/new.html.erb:4:in `block in _app_views_users_new_html_erb__995846824_89246620__1052842684'
     # ./app/views/users/new.html.erb:3:in `_app_views_users_new_html_erb__995846824_89246620__1052842684'
     # ./app/controllers/users_controller.rb:30:in `create'
     # ./spec/controllers/users_controller_spec.rb:122:in `block (5 levels) in <top (required)>'
     # ./spec/controllers/users_controller_spec.rb:121:in `block (4 levels) in <top (required)>'

Вот мой файл home.html.erb:

<% if signed_in? %>
  <table class="front" summary="For signed-in users">
    <tr>
      <td class="main">
        <h1 class="micropost">What's up?</h1>
        <%= render 'shared/micropost_form' %>
      </td>
      <td class="sidebar round">
        <%= render 'shared/user_info' %>
      </td>
    </tr>
  </table>
<% else %>
  <h1>Sample App</h1>

  <p>
    This is the home page for the
    <a href="http://railstutorial.org/">Ruby on Rails Tutorial</a>
    sample application.
  </p>

  <%= link_to "Sign up now!", signup_path, :class => "signup_button round" %>
<% end %>

А вот мой файл _user_info.html.erb:

<div class="user_info">
  <a href="<%= user_path(current_user) %>">
    <%= gravatar_for current_user, :size => 30 %>
    <span class="user_name">
      <%= current_user.name %>
    </span>
    <span class="microposts">
      <%= pluralize(current_user.microposts.count, "micropost") %>
    </span>
  </a>
</div>

Я не думаю, что сделал ошибку, следуя инструкции. Я даже просмотрел похожие темы, темы от stackoverflow.com, но безрезультатно:

У кого-нибудь есть идеи?

Ответы [ 3 ]

0 голосов
/ 29 августа 2011

похоже, что вы не прошли шаг, показанный в листинге 11.30:

def home
  @title = "Home"
  @micropost = Micropost.new if signed_in?
end

, но я понятия не имею, почему это отразилось на частичной визуализации user_info: (

0 голосов
/ 21 декабря 2011

Отсутствует следующий код в app / views / shared / _user_info.html.erb

<div class="user_info">
    <a href="<%= user_path(current_user) %>">
    <%= gravatar_for current_user, :size => 30 %>
    <span class="user_name">
        <%= current_user.name %>
    </span>
    <span class="microposts">
        <%= pluralize(current_user.microposts.count, "micropost") %>
    </span>
    </a>
</div>
0 голосов
/ 28 августа 2011

Вам необходимо добавить представление app/views/shared/_user_info.html.erb. Я думаю, у вас неправильный путь для этого.

...