2015-06-13 188 views
1

我正试图在ROR上实现注册&登录功能。在索引页上,我创建了2个链接,说'新用户'和'登录',并在用户控制器我有注册&登录方法(相应更新的路线)。用户会话和登录

概率:在点击新用户或登录我得到一个错误说

“动作 '显示' 无法找到UsersController”

的routes.rb:

Rails.application.routes.draw do 

resources :users 

get 'users/register', :to=>'users#register' 
get 'users/signup', :to=>'users#signup' 
post 'users/signup', :to=>'users#signup' 
post 'users/login', :to=>'users#login' 
get 'users/login', :to=>'users#login' 
post "users/change_password" => "users#change_password" 
get "users/change_password" => "users#change_password" 

index.html.erb

<%= link_to "New User", users_register_path %><br> 
<%= link_to "Login", users_login_path %><br> 
<%= link_to "Change Password", users_change_password_path %><br> 

用户控制器:

def index 
    @user_details = User.all 
end 

def register 
    puts "**********************" 
    puts params 
    @new_user = User.new 
end 

def signup 
    @new_user = User.new(user_register) 
    if @new_user.save 
    session[:user] = User.authenticate(@user.name,@user.password) 
    redirect_to :action=>"welcome" 
else 
    redirect_to :action=>"login" 
end 
end 

def login 
    puts params 
    if request.post? 
    session[:user] = User.authenticate(params[:user][:name], params[:user][:password]) 
    redirect_to :action=>"welcome" 
    else 
    # redirect_to :action=>"signup" 
end 
end 



def change_password 

    puts "**********************" 
    puts params 
    puts "**********************" 

    if request.post? 
    @pass_change = User.new_password(params[:user][:name], params[:user][:password], params[:user][:new_password]) 
end 
end 

def welcome 
end 


def user_register 
    params.require(:user).permit(:name,:email,:password,:password_confirmation) 
end 

end 

usermodel.rb:

require 'digest/sha1' 

class User < ActiveRecord::Base 


attr_accessor :password, :password_confirmation 

def password=(pass) 
    @password = pass 

    self.salt = User.random_met(10) 
    self.hashedpassword = User.encrypt(@password, self.salt) 
end 

    def self.encrypt(pass,salt) 
    Digest::SHA1.hexdigest(pass+salt) 
    end 

    def self.authenticate(login, pass) 
    user_auth = User.find(:first, :conditions=>["login = ?", login]) 
    return nil if user_auth.nil? 
    return user_auth if  User.encrypt(pass,user_auth.salt)==user_auth.hashedpassword 
    end 


    def self.new_password(name,old,new) 
     user = where(:name=>name) 
     #puts user.email 

    # how to call setter(password) method from here. because My idea is 
    #if User.encrypt(old, user.salt)==user.hashedpassword 
    # run def password=(pass), thereby storing new password. 
    end 

    def self.random_met(len) 
    char = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a 
    salted = "" 
     1.upto(len) { |i| salted << char[rand(char.size-1)] } 
    return salted 
    end 

    end 
+0

点击哪个'link'产生'error'? – Pavan

+0

所有链接。新用户,登录 – user3484925

+0

尝试删除顶部的'resources:users'并将其添加到您的'routes.rb'中的最后一个 – Pavan

回答

0

正如写在Guides

Rails的路线在他们指定的顺序进行匹配,因此,如果您 有一个资源:以上照片获取'照片/投票'显示动作的 路线的资源线将在获取线之前进行匹配。到 解决这个问题,将获取线移动到资源行上方,以便首先匹配 。

您已经定义resources :usersget routes以上,所以轨道将寻找一个show route,所以是错误