Ruby on rails 尝试设计时出现路由错误

Ruby on rails 尝试设计时出现路由错误,ruby-on-rails,ruby,devise,Ruby On Rails,Ruby,Devise,我正在使用Desive连接twitter和facebook,我有两个问题: 当我运行我的应用程序时: http://localhost:3000/users/10/finish_signup 我有第一个问题: LoadError in UserController#finish_signup Expected ../app/controllers/user_controller.rb to define UserController 重新加载此链接时,我遇到第二个问题: Routing Er

我正在使用Desive连接twitter和facebook,我有两个问题: 当我运行我的应用程序时:

http://localhost:3000/users/10/finish_signup
我有第一个问题:

LoadError in UserController#finish_signup
Expected ../app/controllers/user_controller.rb to define UserController
重新加载此链接时,我遇到第二个问题:

Routing Error
uninitialized constant UserController
以下是我的路线:

Thuchanh::Application.routes.draw do
  devise_for :users, :controllers => { omniauth_callbacks: 'omniauth_callbacks' }
  match '/users/:id/finish_signup', :to => 'user#finish_signup', via: [:get, :patch], :as => :finish_signup

  get "user/new"
  get "user/finish_signup"

  root :to => "welcome#index"
  get '/users/:id', :to => 'welcome#sucess', :as => "user" 
  resources :users
我的用户\u控制器

class UsersController < ApplicationController
  def show
  end

  def edit
  end

  def update
    respond_to do |format|
      if @user.update(user_params)
        sign_in(@user == current_user ? @user : current_user, :bypass => true)
        format.html { redirect_to @user, notice: 'Your profile was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: 'edit' }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
  end


  def finish_signup
    # authorize! :update, @user 
    if request.patch? && params[:user] #&& params[:user][:email]
      if @user.update(user_params)
        @user.skip_reconfirmation!
        sign_in(@user, :bypass => true)
        redirect_to @user, notice: 'Your profile was successfully updated.'
      else
        @show_errors = true
      end
    end
...
我的用户模型

class User < ActiveRecord::Base
  TEMP_EMAIL_PREFIX = 'change@me'
  TEMP_EMAIL_REGEX = /\Achange@me/
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable, :omniauthable
  validates_format_of :email, :without => TEMP_EMAIL_REGEX, on: :update

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :remember_me
  attr_accessible :pass, :username, :image, :age

  validates :username, :pass, :presence => true
  validates :username, :pass, :length => { :minimum => 4 }
  validates :username, :uniqueness => true
  def self.login(username,pass)
    user = find_by_username(username) and user = find_by_pass(pass)
    if user.nil?
      return nil
    else
    return user
    end
  end

  def unfollow(other_user)
    following_relations.find_by_following_id(other_user.id).destroy
  end

  def self.search(search)
    search_condition = "%" + search + "%"
    find(:all, :conditions => ['username LIKE ? OR age LIKE ?', search_condition, search_condition])
  end

  def self.find_for_oauth(auth, signed_in_resource = nil)

    identity = Identity.find_for_oauth(auth)
    user = signed_in_resource ? signed_in_resource : identity.user

    if user.nil?

      email_is_verified = auth.info.email && (auth.info.verified || auth.info.verified_email)
      email = auth.info.email if email_is_verified
      user = User.where(:email => email).first if email

      if user.nil?
        user = User.new(
          name: auth.extra.raw_info.name,

          email: email ? email : "#{TEMP_EMAIL_PREFIX}-#{auth.uid}-#{auth.provider}.com",
          password: Devise.friendly_token[0,20]
        )
        user.skip_confirmation!
        user.save!
      end
    end


    if identity.user != user
      identity.user = user
      identity.save!
    end
    user
  end

  def email_verified?
    self.email && self.email !~ TEMP_EMAIL_REGEX
  end
end
class用户TEMP\u email\u REGEX,on::update
#设置模型的可访问(或受保护)属性
可访问属性:电子邮件、密码、密码确认、记住我
可访问属性:通行证、:用户名、:图像、:年龄
验证:username,:pass,:presence=>true
验证:username,:pass,:length=>{:minimum=>4}
验证:用户名,:唯一性=>true
def self.login(用户名、密码)
user=find_by_username(用户名)和user=find_by_pass(pass)
如果user.nil?
归零
其他的
返回用户
结束
结束
def unfollow(其他用户)
跟踪\u关系。通过跟踪\u id(其他用户id)查找\u。销毁
结束
def self.search(搜索)
搜索条件=“%”+搜索+“%”
查找(:all,:conditions=>['username LIKE?或age LIKE?',搜索条件,搜索条件])
结束
def self.find_for_oauth(auth,signed_in_resource=nil)
identity=identity.find_for_oauth(auth)
用户=在资源中签名?已签名的\u-in\u资源:identity.user
如果user.nil?
email_is_verified=auth.info.email&(auth.info.verified | | auth.info.verified_email)
电子邮件=auth.info.email(如果电子邮件已验证)
user=user.where(:email=>email)。第一个if email
如果user.nil?
user=user.new(
名称:auth.extra.raw_info.name,
电子邮件:email?email:“#{TEMP_email_PREFIX}-#{auth.uid}-#{auth.provider}.com”,
密码:design.friendly_令牌[0,20]
)
user.skip\u确认!
user.save!
结束
结束
如果identity.user!=用户
identity.user=用户
身份,救命!
结束
用户
结束
def电子邮件是否已验证?
self.email&&self.email!~临时电子邮件
结束
结束

求你了!请帮助我修复该问题,或者告诉我代码中存在什么问题???

您需要检查
用户控制器
文件的位置。控制器是复数形式(包括文件名和类名),您可能在某个地方有输入错误。

是的!!我在控制器中使用了不同的用户名,我太傻了:)谢谢
class User < ActiveRecord::Base
  TEMP_EMAIL_PREFIX = 'change@me'
  TEMP_EMAIL_REGEX = /\Achange@me/
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable, :omniauthable
  validates_format_of :email, :without => TEMP_EMAIL_REGEX, on: :update

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :remember_me
  attr_accessible :pass, :username, :image, :age

  validates :username, :pass, :presence => true
  validates :username, :pass, :length => { :minimum => 4 }
  validates :username, :uniqueness => true
  def self.login(username,pass)
    user = find_by_username(username) and user = find_by_pass(pass)
    if user.nil?
      return nil
    else
    return user
    end
  end

  def unfollow(other_user)
    following_relations.find_by_following_id(other_user.id).destroy
  end

  def self.search(search)
    search_condition = "%" + search + "%"
    find(:all, :conditions => ['username LIKE ? OR age LIKE ?', search_condition, search_condition])
  end

  def self.find_for_oauth(auth, signed_in_resource = nil)

    identity = Identity.find_for_oauth(auth)
    user = signed_in_resource ? signed_in_resource : identity.user

    if user.nil?

      email_is_verified = auth.info.email && (auth.info.verified || auth.info.verified_email)
      email = auth.info.email if email_is_verified
      user = User.where(:email => email).first if email

      if user.nil?
        user = User.new(
          name: auth.extra.raw_info.name,

          email: email ? email : "#{TEMP_EMAIL_PREFIX}-#{auth.uid}-#{auth.provider}.com",
          password: Devise.friendly_token[0,20]
        )
        user.skip_confirmation!
        user.save!
      end
    end


    if identity.user != user
      identity.user = user
      identity.save!
    end
    user
  end

  def email_verified?
    self.email && self.email !~ TEMP_EMAIL_REGEX
  end
end