我仍然在做我的第一个Ruby on Rails项目。我最近在处理的问题是用户管理系统。我尝试使用设计,但我不能通过一个特定的错误,所以我决定创建我的登录/登录系统手动。我使用Ruby 3.0.2 w/Rails 7.0.0alpha2.
我得到了很多更远的这种手动方式,但我得到'未定义的方法'成本'为BCrypt::引擎:类'我已经谷歌,他们提到改变BCrypt的版本,我没有运气
他们提到要去我的user_controller并将我的创建方法从旧代码更改为'@user = User.new(user_params)'这样做将我的错误从'forbidden'更改为我目前写信给您的错误。
不确定我的问题在哪里,我的猜测是在模型或控制器的某个地方,感谢您的时间!
用户控制器class UsersController < ApplicationController
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
session[:user_id] = @user.id
redirect_to root_url, notice: "Thank your for signing up!"
else
flash[:danger] = 'Invalid email/password combination'
render "new"
end
end
private
def user_params
params.require(:user).permit(:email, :password, :password_confirmation)
end
end
会话控制器
class SessionsController < ApplicationController
def create
@user = User.find_by_email(params[:email])
if @user && @user.authenticate(params[:password])
session[:user_id] = user.id
redirect_to root_url, notice: "logged in!"
else
flash.now.alert = "Email or passwrod is invalid"
render "new"
end
end
def destroy
session.delete(:user_id)
@current_user = nil
end
end
用户模型require 'bcrypt'
class User < ApplicationRecord
include BCrypt
validates :email, uniqueness: true
has_secure_password
def user_params
params.require(:user).permit(:email, :password, :password_confirmation)
end
end
路线
Rails.application.routes.draw do
get 'sessions/new'
resources :users, only: [:new, :create]
resources :fighters
resources :sessions
get 'home/about'
root 'home#index'
get 'signup', to: 'users#new', as: 'signup'
get 'login', to: 'sessions#new', as: 'login'
get 'logout', to: 'sessions#destroy', as: 'logout'
end
误差用户控制器
用户模型路线会话控制器
我今天早上登录,突然我的问题被解决了!可能是终端关闭的问题,因为我比较了我在这里发布的代码和我文件中的代码,几乎没有变化。
我所做的1个更改是添加@到'session[:user_id] = user。Id '使'@user.id'
在我能够登录后,我得到一个错误的注销。我所做的改变是添加"session"。在我的销毁方法中清除'和'redirect_to login_path'。
我的sessions_controller.rb
我还添加了"delete 'sessions',到:'session#destroy'"routes.rb