2012-03-03 100 views
1

在我的第一个rails项目上工作时,请原谅任何不正确的术语。我创建了一个用户模型和用户控制器。我也有一个页面控制器,我创建了我的登陆/主页。我想要一个表单,以便人们可以在主页上创建一个帐户(新用户)。Rails 3.2.0:在用户控制器以外的控制器中创建用户(NoMethodError)

为此,我使用app/views/users中的表单创建了一个部分,并从主页中呈现它。当我尝试加载网页,我不断收到此错误:

NoMethodError in Pages#home 
undefined method `model_name' for NilClass:Class 

以下是相关文件:

应用程序/视图/用户/ _usersignup.html.erb

<%= 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 %> 

pages_controller .RB

class PagesController < ApplicationController 

    def home 
    @title = "Home" 
    end 

    def new 
    @user = User.new 
    end 
    end 

users_controller.rb

class UsersController < ApplicationController 

    def new 
     @user = User.new 
    @title = "Sign up" 
    end 

    def create 
    @user = User.new(params[:user]) 
    if @user.save 
     sign_in @user 
     flash[:success] = "Account created!" 
     redirect_to @user 
    else 
     @title = "Sign up" 
     render 'new' 
    end 
end 
end 

请让我知道,如果有什么我可以提供。谢谢!

回答

5

表单需要@user作为用户的实例。在你的PagesController#home动作中,你需要实例化它。

PagesController < ApplicationController 
    def home 
    @title = 'Home' 
    @user = User.new 
    end 
end 

应该为你做。

+0

谢谢,这是诀窍!在这种情况下,由于我通过页面控制器创建用户,users_controller.rb仍然需要下面的代码吗? 'def new @user = User.new @title =“注册” 结束# – Huy 2012-03-03 22:42:17

+0

不,如果您从不打电话给用户#新。 – TheDelChop 2012-03-03 22:43:16

+0

感谢您的快速回复。我感谢帮助! – Huy 2012-03-03 22:50:21