2011-09-15 2 views
1

Я получаю NoMethodError в Пользователями # новый после добавления парциальное приложение/просмотров/общий/_error_messages.html.erbRails Tutorial Глава 8.2.3 NoMethodError пользователей # новых

Showing /Users/gjb/Sites/rails_projects/sample_app/app/views/shared/_error_messages.html.erb where line #1 raised: 

You have a nil object when you didn't expect it! 
You might have expected an instance of ActiveRecord::Base. 
The error occurred while evaluating nil.errors 

Вот мое приложение/просмотров /shared/_error_messages.html.erb

<% if @users.errors.any? %> 
    <div id="error_explanation"> 
    <h2><%= pluralize(@user.errors.count, "error") %> 
     prohibited this user from being saved:</h2> 
    <p>Ther were problems with the following fields:</p> 
    <ul> 
    <% @user.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
    <% end %> 
    </ul> 
    </div> 
<% end %> 

Вот мое приложение/просмотров/пользователей/new.html.erb

<h1>Sign up</h1> 

    <%= form_for(@user) do |f| %> 
    <%= render 'shared/error_messages' %> 

    <div class="field"> 
    <%= f.label :name %> 
    <%= f.text_field :name %> 
    </div>  
    <div class="field"> 
    <%= f.label :email %> 
    <%= f.text_field :email %> 
    </div> 
    <div class="field"> 
    <%= f.label :password %> 
    <%= f.password_field :password %> 
    </div> 
    <div class="field"> 
    <%= f.label :password_confirmation %> 
    <%= f.password_field :password_confirmation %> 
    </div> 
    <div class="actions"> 
    <%= f.submit "Sign up" %> 
    </div> 
<% end %> 

Я провел много время на это, пытаясь понять это правильно, но я чувствую себя застрявшим в этом вопросе. Любая подсказка будет полезна. Благодаря!

+0

изменить "@users" на "@user" – lucapette

ответ

2

Первая линия вашего участка, где у вас есть <% if @users.errors.any? %> должно быть <% if @user.errors.any? %>. У вас есть множественное число, а не единственное, поэтому вы используете переменную, которую вы никогда не устанавливали. И переменные экземпляра: nil в первый раз, когда они используются вместо повышения ошибки.

+0

Это не первый раз, когда меня привлекло множественное число. Я должен был это увидеть. Благодаря! –

+0

@Emily, +1, потому что вы были выбраны :) – apneadiving

2

В app/views/shared/_error_messages.html.erb заменить:

<% if @users.errors.any? %> 

С:

<% if @user.errors.any? %> 

Действительно, @users переменная не существует.

+0

doh! Благодаря! Я действительно должен был поймать это. –

+0

обычно, когда 2 ответа эквивалентны, один выбирает первый, который был отправлен. Ну, неважно, держите Эмили (но помните +1 существуют :)) – apneadiving

+0

извините, здесь нет. –

Смежные вопросы