나는 최근에 내 프로젝트의 User model
에 "편집증" 보석을 추가했다. 이 모델은 또한 "has_secure_password"
을 사용합니다. 내 User model
상단에 "acts_as_paranoid"
을 올 때까지 완벽하게 작동합니다. 이제 다음과 같은 인수 오류가 발생합니다.acts_as_paranoid가 내 모델을 손상시키는 이유는 무엇입니까?
Started GET "https://stackoverflow.com/users/8/edit" for 127.0.0.1 at 2014-09-16 20:57:48 -0400
Processing by UsersController#edit as HTML
Parameters: {"id"=>"8"}
Completed 500 Internal Server Error in 5ms
ArgumentError (wrong number of arguments (0 for 1)):
app/models/user.rb:19:in `hash'
app/helpers/sessions_helper.rb:25:in `current_user'
app/helpers/sessions_helper.rb:11:in `signed_in?'
app/helpers/sessions_helper.rb:33:in `signed_in_user'
모든 아이디어를 높이 평가할 수 있습니다. 여기
class User < ActiveRecord::Base
acts_as_paranoid
before_save { self.email = email.downcase }
before_create :create_remember_token
validates :name, presence: true, length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
validates :password, length: { minimum: 6 }
validates_inclusion_of :status, :in => ['active', 'inactive']
has_secure_password
def User.new_remember_token
SecureRandom.urlsafe_base64
end
def User.hash(token)
Digest::SHA1.hexdigest(token.to_s)
end
private
def create_remember_token
self.remember_token = User.hash(User.new_remember_token)
end
end
그리고 내 세션 도우미 :
module SessionsHelper
def sign_in(user)
remember_token = User.new_remember_token
cookies.permanent[:remember_token] = remember_token
user.update_attribute(:remember_token, User.hash(remember_token))
self.current_user = user
end
def signed_in?
!current_user.nil?
end
def current_user=(user)
@current_user = user
end
def current_user
@current_user
end
def current_user
remember_token = User.hash(cookies[:remember_token])
@current_user ||= User.find_by(remember_token: remember_token)
end
def current_user?(user)
user == current_user
end
def signed_in_user
unless signed_in?
store_location
redirect_to signin_url, notice: "Please sign in."
end
end
def sign_out
self.current_user = nil
cookies.delete(:remember_token)
end
def redirect_back_or(default)
redirect_to(session[:return_to] || default)
session.delete(:return_to)
end
def store_location
session[:return_to] = request.url if request.get?
end
end
은'hash'는 시스템 방법이다. 다이제스트 생성 방법에 대해 다른 이름을 선택하십시오. –