2014-09-17 3 views
1

나는 최근에 내 프로젝트의 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 
+0

은'hash'는 시스템 방법이다. 다이제스트 생성 방법에 대해 다른 이름을 선택하십시오. –

답변

1

User.hashby convention of its parent class이 인수를하지 않으며 Fixnum를 반환해야이

은 여기 내 사용자 모델입니다.

그것은 루비 언어 전반에 걸쳐 다른 클래스에 의해 객체 비교를 위해 사용됩니다

, 예를 들어 Hash에서 키의 값을 찾을 때. a.eql?(b) 인 경우 a.hash == b.hash도 true 여야합니다.

문제를 해결하는 가장 좋은 방법은, 뭔가에 hash 방법 이름을 바꿀 루비 규칙의 방법으로 얻을 수 없습니다.

+0

그 덕분에, 고마워! – Sam

관련 문제