用于NilClass的未定义方法`model_name':Class [Ch。 9 MHartl教程]

时间:2013-04-25 18:58:04

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2

完成Mhartl rails教程,我遇到了这个错误。

错误讯息:

NoMethodError in Users#edit

Showing /Users/ME/Sites/rails_projects_updated/first_app/app/views/users/edit.html.erb where line #6 raised:

undefined method `model_name' for NilClass:Class
Extracted source (around line #6):

3: 
4: <div class="row">
5:   <div class="span6 offset3">
6:     <%= form_for(@user) do |f| %>
7:       <%= render 'shared/error_messages' %>
8: 
9:       <%= f.label :name %>

Edit.html.erb

<% provide(:title, "Edit user") %> 
<h1>Update your profile</h1>

<div class="row">
  <div class="span6 offset3">
    <%= form_for(@user) do |f| %>
      <%= render 'shared/error_messages' %>

      <%= f.label :name %>
      <%= f.text_field :name %>

      <%= f.label :email %>
      <%= f.text_field :email %>

      <%= f.label :password %>
      <%= f.password_field :password %>

      <%= f.label :password_confirmation, "Confirm Password" %>
      <%= f.password_field :password_confirmation %>

      <%= f.submit "Save changes", class: "btn btn-large btn-primary" %>
    <% end %>

    <%= gravatar_for @user %>
    <a href="http://gravatar.com/emails">change</a>
  </div>
</div>

Users_controller

class UsersController < ApplicationController

  def new
      @user = User.new

      respond_to do |format|
        format.html # new.html.erb
        format.json { render json: @user }
      end
    end

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

   def create
       @user = User.new(params[:user])
       if @user.save
         sign_in @user
         flash[:success] = "Welcome to the Sample App!"
         redirect_to @user
       else
         render 'new'
       endx
     end

       def edit
         @user = User.find(params[:id])
       end

       def update
         @user = User.find(params[:id])
         if @user.update_attributes(params[:user])
           # Handle a successful update.
         else
           render 'edit'
         end
       end
     end
   end

如果我可以提供任何其他控制器/视图/模型,请告诉我,我会相应地更新帖子!

感谢。

1 个答案:

答案 0 :(得分:1)

你的创建控制器有一个endx,它应该有一个结束。

def create
  @user = User.new(params[:user])
  if @user.save
    ...
  endx
end

应该是

def create
  @user = User.new(params[:user])
  if @user.save
   ...
  end
end