2012-03-01 2 views
1

이 포럼에서 검색 한 결과,이 문제에 대한 답을 찾지 못했습니다. 레일 3.2.1 및 루비 1.9.3을 실행 중입니다.Michael Hartl Tutorial v. 3.2 챕터 7.17 사용자의 NoMethodError # new Line 4

Hartl 책을 자세히 읽었으며 테스팅 및 서명 페이지 렌더링시 오류가 발생했습니다. 여기

일부 추적과 함께 오류입니다 : 여기

undefined method `model_name' for NilClass:Class 

Extracted source (around line #4): 

1: <% provide(:title, 'Sign up') %> 
2: <h1>Sign up</h1> 
3: 
4: <%= form_for(@user) do |f| %> 
5: <div class="field"> 
6:  <%= f.label :name %><br /> 
7:  <%= f.text_field :name %> 

Rails.root: /Users/Brian/Sites/rails/brightspot_1-1 
Application Trace | Framework Trace | Full Trace 

app/views/users/new.html.erb:4:in  
`_app_views_users_new_html_erb___4096651331723577149_70289685515940' 

것은 내 new.html.erb입니다 : 여기

<% provide(:title, 'Sign up') %> 
<h1>Sign up</h1> 

<%= form_for(@user) do |f| %> 
    <div class="field"> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name %> 
    </div> 
    <div class="field"> 
    <%= f.label :email %><br /> 
    <%= f.text_field :email %> 
    </div> 
    <div class="field"> 
    <%= f.label :password %><br /> 
    <%= f.password_field :password %> 
    </div> 
    <div class="field"> 
    <%= f.label :password_confirmation, "Confirmation" %><br /> 
    <%= f.password_field :password_confirmation %> 
    </div> 
    <div class="actions"> 
    <%= f.submit "Sign up" %> 
    </div> 
<% end %> 

그리고 나의 users_controller.rb

class UsersController < ApplicationController 
    def show 
    @user = User.find(params[:id]) 
    end 

    def new 
    @user = User.new 
    end 

    def new 
    end 
end 

는 IS 실패한 테스트 :

RSpec에에서

그리고 오류 메시지 :이와

Failures: 

    1) User pages signup with invalid information should not create a user 
    Failure/Error: before { visit signup_path } 
    ActionView::Template::Error: 
     undefined method `model_name' for NilClass:Class 
    # ./app/views/users/new.html.erb:4:in  
`_app_views_users_new_html_erb___947544063866573638_70125101083220' 
    # ./spec/requests/user_pages_spec.rb:17:in `block (3 levels) in <top (required)>' 

    2) User pages signup with valid information should create a user 
    Failure/Error: before { visit signup_path } 
    ActionView::Template::Error: 
     undefined method `model_name' for NilClass:Class 
    # ./app/views/users/new.html.erb:4:in  
`_app_views_users_new_html_erb___947544063866573638_70125101083220' 
    # ./spec/requests/user_pages_spec.rb:17:in `block (3 levels) in <top (required)>' 

Finished in 0.20414 seconds 
2 examples, 2 failures 

어떤 도움이 많이 주시면 감사하겠습니다. 미리 감사드립니다, Brian.

답변

3

form_for에 전달중인 @user 개체가 nil 인 경우 오류가 발생합니다. 컨트롤러를 보면 new 메서드가 두 번 정의되고 두 번째 정의에서는 @user 개체가 인스턴스화되지 않습니다.

컨트롤러에서 new 메서드의 두 번째 (빈) 정의를 삭제하면 잘 처리해야합니다.

+0

그게 효과가 있습니다! 감사. –

+0

제대로 작동한다면 @wpgreenway에 정답을 주어야합니다. –

관련 문제