我正在努力实施注册& ROR上的登录功能。在索引页面上,我创建了2个链接,说“新用户”和“登录”,在用户控制器中,我有注册&登录方法(相应地更新路线)。
问题:点击新用户或登录后,我收到错误
“无法找到UsersController的动作'show'”
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>
userscontroller:
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 :(得分:0)
正如Guides所述,
Rails路由按照指定的顺序进行匹配,所以如果你 有一个资源:照片上面的照片/民意调查&#39;节目动作 资源行的路由将在获取行之前匹配。至 解决这个问题,将get行移到资源行上方,这样就可以了 首先匹配。
您已在 resources :users
上方定义 get routes
,因此rails会查找 show route
,错误也是如此。