2013-09-30 24 views
9

我在访问Rails 4中的/users/new时出现错误Unable to autoload constant UsersController, expecting /app/controllers/users_controller.rb to define it无法自动加载常量UsersController

这里是控制器代码

class UserController < ApplicationController 
    def new 
     @user = User.new 
    end 

    def create 
     @user = User.new(params[:user]).permit(:email, :password,:password_confirmation) 

     respond_to do |format| 
     if @user.save 
     format.html { redirect_to new_user_path, notice: 'User was successfully created.' } 
     format.json { render action: 'show', status: :created, location: @user } 
     else 
     format.html { render action: 'new' } 
     format.json { render json: @user.errors, status: :unprocessable_entity } 
     end 
     end 
    end 
    end 

而对于new.html.erb我的观点是:

<h1>Sign up</h1> 

    <%= form_for(@user) do |f| %> 

    <% if @user.errors.any? %> 
     <div id="error_explanation"> 
     <h2><%= pluralize(@user.errors.count, "error") %> prohibited this post from being  saved:</h2> 

     <ul> 
      <% @user.errors.full_messages.each do |msg| %> 
      <li><%= msg %></li> 
      <% end %> 
     </ul> 
    </div> 
    <% end %> 
    <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" %> 
    <%= f.password_field :password_confirmation %> 
    </div> 
    <div class="actions"> 
    <%= f.submit "Create my account" %> 
    </div> 
<% end %> 

User型号:

class User < ActiveRecord::Base 
    has_many :projects 
    has_many :pledges 
    has_many :posts 
    has_many :comments 
end 
+6

变化'UserController'到'UsersController'(在轨惯例,控制器名称应该是资源的多元化的形式)。 –

+0

谢谢@ZachKemp。它为我工作。 – Preethika

回答

14

Rails的预计是复数控制器名称。您发布的第一个文件内容的第一行写为奇:

/app/controllers/users_controller.rb您有:

用户控制器<的ApplicationController

相反,它应该是:

用户控制器<的ApplicationController


Rails Guide提供了你的路由文件中定义的资源的例子。此外,还有一个信息说明,解释了使用resource方法定义路线将始终映射到控制器的复数名称。

这是本指南的信息说明。

因为您可能希望对单数路线(/帐户)和复数路线(/ accounts/45)使用相同的控制器,所以单数资源映射到多个控制器。例如,资源:照片和资源:照片创建映射到相同控制器(PhotosController)的单数和复数路线。

来源:Resource Routing: The Rails Default

+0

您能否引用您的“Rails期望控制器名称被复数化”的来源。 – yekta

+0

@yekta我添加了一些额外的信息与来源。这强调了多元化控制器是常规的事实。这些信息被埋在旁边。多元化贯穿整个指南,Rails本身。可以覆盖默认值并使用单个控制器。 – sealocal

+0

感谢您的来源。虽然多元化并没有解决我的问题。在我的情况下,我在ApplicationController中使用'unloadable',将其解决。 – yekta