未初始化的常量UsersController :: User

时间:2012-06-02 03:24:07

标签: ruby-on-rails

我在哪里初始化常量?我以为它只是在控制器中。

错误

uninitialized constant UsersController::User

用户控制器

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

路由

SampleApp::Application.routes.draw do

  get "users/new"
 resources :users
  root to: 'static_pages#home'

  match '/signup', to: 'users#new'

  match '/help', to: 'static_pages#help'
  match '/about', to: 'static_pages#about'
  match '/contact', to: 'static_pages#contact'

user.rb

 class AdminUser < ActiveRecord::Base
      attr_accessible :name, :email, :password, :password_confirmation
      has_secure_password
      before_save { |user| user.email = email.downcase }
      validates :name, presence: true, length: { maximum: 50 }
      VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
      validates :email, presence: true,
      format: { with: VALID_EMAIL_REGEX },
      uniqueness: { case_sensitive: false }
      validates :password, presence: true, length: { minimum: 6 }
      validates :password_confirmation, presence: true
    end

这可能会有所帮助 我也得到了

The action 'index' could not be found for UsersController

当我转到用户页面时,但当我转到用户/ 1时,我收到上述错误。

1 个答案:

答案 0 :(得分:6)

你有几个问题 -

  1. 您的AdminUser模型应该被调用User,因为它在user.rb中定义,而您的UsersController正在尝试找到它们,这就是您获得的原因uninitialized constant UsersController::User错误。控制器不会为您定义User类。

  2. 您尚未在index中定义UsersController操作,但您已为其定义了路线。在routes.rb文件中声明资源时,Rails默认会创建7条路由,指向控制器中的特定操作 - indexshownew,{ {1}},editcreateupdate。您可以通过delete参数阻止Rails定义一个或多个路由 - 例如:only您可以看到已定义的路由,以及它们将使用resources :users, :only => [:new, :show]调用的控制器操作。默认情况下,rake routes会点击http://localhost:3000/users操作,默认情况下UsersController#index会点击http://localhost:3000/users/1操作,并将UsersController#show作为1参数传递。