Ruby on rails 3.2 迈克尔·哈特尔。3.2第7.17章用户中的命名错误#新线4

Ruby on rails 3.2 迈克尔·哈特尔。3.2第7.17章用户中的命名错误#新线4,ruby-on-rails-3.2,Ruby On Rails 3.2,在这个论坛上搜索之后,我发现我在这个问题上停滞不前。我运行的是rails 3.2.1和ruby 1.9.3 我非常仔细地阅读了Hartl的书,在测试和呈现注册页面时遇到了一个错误 以下是一些跟踪的错误: undefined method `model_name' for NilClass:Class Extracted source (around line #4): 1: <% provide(:title, 'Sign up') %> 2: <h1>Sign up

在这个论坛上搜索之后,我发现我在这个问题上停滞不前。我运行的是rails 3.2.1和ruby 1.9.3

我非常仔细地阅读了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'
以及来自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
故障:
1) 使用无效信息注册的用户页面不应创建用户
失败/错误:在{访问注册路径}之前
ActionView::模板::错误:
NilClass:Class的未定义方法“model_name”
#./app/views/users/new.html.erb:4:in
`_应用程序视图用户新html erb 7012511083220'
#./spec/requests/user\u pages\u spec.rb:17:in'block(3层)in'
2) 使用有效信息注册的用户页面应创建一个用户
失败/错误:在{访问注册路径}之前
ActionView::模板::错误:
NilClass:Class的未定义方法“model_name”
#./app/views/users/new.html.erb:4:in
`_应用程序视图用户新html erb 7012511083220'
#./spec/requests/user\u pages\u spec.rb:17:in'block(3层)in'
以0.20414秒完成
2例,2次失败

在此方面的任何帮助都将不胜感激。提前感谢您,Brian。

当您传递给form_for的
@user
对象为nil时,会发生此错误。如果查看控制器,
new
方法定义了两次,在第二个定义中,它不会实例化
@user
对象


删除控制器中
方法的第二个(空)定义,您应该可以开始了。

如果它有效,那么您应该用正确的答案奖励@wpgreenway。
class UsersController < ApplicationController
  def show
    @user = User.find(params[:id])
  end

  def new
    @user = User.new
  end

  def new
  end
end
require 'spec_helper'

describe "User pages" do

  subject { page }

  describe "profile page" do
    let(:user) { FactoryGirl.create(:user) }
    before { visit user_path(user) }

    it { should have_selector('h1',    text: user.name) }
    it { should have_selector('title', text: user.name) }
  end

  describe "signup" do

      before { visit signup_path }

      describe "with invalid information" do
        it "should not create a user" do
          expect { click_button "Sign up" }.not_to change(User, :count)
        end
      end

      describe "with valid information" do
        before do
          fill_in "Name",         with: "Example User"
          fill_in "Email",        with: "user@example.com"
          fill_in "Password",     with: "foobar"
          fill_in "Confirmation", with: "foobar"
        end

        it "should create a user" do
          expect { click_button "Sign up" }.to change(User, :count).by(1)
        end
     end
   end

end
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