无法添加用户:ActionController :: RoutingError(未初始化的常量UsersController)

时间:2015-08-01 20:40:15

标签: ruby-on-rails

所以,我在Hartls教程的7.2章注册表中,但我遇到了一些问题。我没有像教程那样得到ForbiddenAttributes(图7.15)。

我可以访问我的/注册,但每当我提交一个具有错误属性(邮件/密码)的用户时,它会抛出500,“我们很抱歉,但出了点问题。”不是上面提到的ForbiddenAttributes。

服务器日志中的代码段:

Started POST "/users" for ::1 at 2015-08-01 22:19:59 +0200

ActionController::RoutingError (uninitialized constant UsersController):
  activesupport (4.2.0) lib/active_support/inflector/methods.rb:261:in `const_get'
  activesupport (4.2.0) lib/active_support/inflector/methods.rb:261:in `block in constantize'
  activesupport (4.2.0) lib/active_support/inflector/methods.rb:259:in `each'
  activesupport (4.2.0) lib/active_support/inflector/methods.rb:259:in `inject'
  activesupport (4.2.0) lib/active_support/inflector/methods.rb:259:in `constantize'

我已将其缩小到资源:我的routes.rb中的用户。但无法确定它。我缩小它的原因是每当我将'用户'与'用户'交换时,/ signup停止工作,我得到了这个

if options.empty?
  recipient.send(method, *args)
else
  recipient.send(method, *args, options)
end

当/ signup停止工作时,我的用户/ 1(显示)开始工作,这与路由中的“用户”没有关系。

代码:

的routes.rb

Rails.application.routes.draw do

  resources :user

  root              'static_pages#home'
  get 'help' =>     'static_pages#help'
  get 'about' =>    'static_pages#about'
  get 'contact' =>  'static_pages#contact'
  get 'signup' =>   'user#new'
  get 'users/:id' => 'user#show'

end

user_controller.rb

class UserController < ApplicationController

  def index
  end

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

  def new
   @user = User.new
  end

  def create
    @user = User.new(params[:users])
    if @user.save
      #Successfull
    else
      render 'new'
    end
  end

end

User.rb

class User < ActiveRecord::Base
  before_save { self.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, length: { maximum: 255 },
                            format: { with: VALID_EMAIL_REGEX },
                            uniqueness: { case_sensetive: false }
has_secure_password
validates :password, length: { minimum: 6 }
end

1 个答案:

答案 0 :(得分:1)

问题与UserController有关,因为您的代码需要UsersController才能采取行动。

根据惯例,控制器名称始终为复数。 http://guides.rubyonrails.org/action_controller_overview.html#controller-naming-convention

尝试将UserController更改为UsersController

其次将resources :user更改为resources :users 同样在app / view文件夹中有一个名为user的文件夹。您需要将该文件夹重命名为users

而是为用户生成控制器。并删除用户但可能丢失数据的那个。你需要确保从用户到用户文件的复制内容。

事情会奏效。