2014-11-13 1 views
1

에 대해 정의되지 않은 메서드`remember_token = '예를 들어'railstutorial 'book.But에서와 같이 세션을 만들려고 시도했는데 어디에서 오류가 발생했는지 찾을 수 없습니다. 이 내 session_helper# <User.Railstutorial

 def sign_in(user) 
     remember_token = User.new_remember_token 
     cookies.permanent[:remember_token] = remember_token 
     user.update_attribute(:remember_token, User.encrypt(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 
     remember_token = User.encrypt(cookies[:remember_token]) 
     @current_user ||= User.find_by(remember_token: remember_token) 
     end 

    end 

인이 내 컨트롤러 sessions_controller입니다

def new 
    end 

    def create 
    user = User.find_by(email: params[:session][:email].downcase) 
    if user && user.authenticate(params[:session][:password]) 
     sign_in user 
     redirect_to user 
    else 
     flash.now[:error] = 'Invalid email/password combination' 
     render 'new' 
    end 
    end 

    def destroy 
    end 
end 

이것은

before_save { self.email = email.downcase } 
before_create :create_remember_token 

     validates :name, presence: true, length: { maximum: 50, minimum: 2 }, uniqueness: true 
     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 } 
     has_secure_password 

    def User.new_remember_token 
    SecureRandom.urlsafe_base64 
    end 

    def User.encrypt(token) 
    Digest::SHA1.hexdigest(token.to_s) 
    end 

    private 

    def create_remember_token 
     self.remember_token = User.encrypt(User.new_remember_token) 
    end 
end 

이 콘솔에서 전체 오류 메시지가 users.rb 내 모델입니다

2.1.2 :004 > user.save 
    (0.2ms) begin transaction 
    User Exists (0.3ms) SELECT 1 AS one FROM "users" WHERE "users"."name" = 'anna' LIMIT 1 
    User Exists (0.3ms) SELECT 1 AS one FROM "users" WHERE LOWER("users"."email") = LOWER('[email protected]') LIMIT 1 
    (0.2ms) rollback transaction 
NoMethodError: undefined method `remember_token=' for #<User:0x000000026f58b8> 
    from /home/weare138/.rvm/gems/ruby-2.1.2/gems/activemodel-4.1.6/lib/active_model/attribute_methods.rb:435:in `method_missing' 
    from /home/weare138/.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.6/lib/active_record/attribute_methods.rb:211:in `method_missing' 
    from /home/weare138/app/myapp/app/models/user.rb:24:in `create_remember_token' 
    from /home/weare138/.rvm/gems/ruby-2.1.2/gems/activesupport-4.1.6/lib/active_support/callbacks.rb:424:in `block in make_lambda' 
    from /home/weare138/.rvm/gems/ruby-2.1.2/gems/activesupport-4.1.6/lib/active_support/callbacks.rb:160:in `call' 
    from /home/weare138/.rvm/gems/ruby-2.1.2/gems/activesupport-4.1.6/lib/active_support/callbacks.rb:160:in `block in halting' 
    from /home/weare138/.rvm/gems/ruby-2.1.2/gems/activesupport-4.1.6/lib/active_support/callbacks.rb:86:in `call' 
    from /home/weare138/.rvm/gems/ruby-2.1.2/gems/activesupport-4.1.6/lib/active_support/callbacks.rb:86:in `run_callbacks' 
    from /home/weare138/.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.6/lib/active_record/callbacks.rb:306:in `_create_record' 
    from /home/weare138/.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.6/lib/active_record/timestamp.rb:57:in `_create_record' 
    from /home/weare138/.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.6/lib/active_record/persistence.rb:483:in `create_or_update' 
    from /home/weare138/.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.6/lib/active_record/callbacks.rb:302:in `block in create_or_update' 
    from /home/weare138/.rvm/gems/ruby-2.1.2/gems/activesupport-4.1.6/lib/active_support/callbacks.rb:113:in `call' 
    from /home/weare138/.rvm/gems/ruby-2.1.2/gems/activesupport-4.1.6/lib/active_support/callbacks.rb:113:in `call' 
    from /home/weare138/.rvm/gems/ruby-2.1.2/gems/activesupport-4.1.6/lib/active_support/callbacks.rb:166:in `block in halting' 
    from /home/weare138/.rvm/gems/ruby-2.1.2/gems/activesupport-4.1.6/lib/active_support/callbacks.rb:86:in `call' 
... 17 levels... 
    from /home/weare138/.rvm/gems/ruby-2.1.2/gems/railties-4.1.6/lib/rails/commands/console.rb:9:in `start' 
    from /home/weare138/.rvm/gems/ruby-2.1.2/gems/railties-4.1.6/lib/rails/commands/commands_tasks.rb:69:in `console' 
    from /home/weare138/.rvm/gems/ruby-2.1.2/gems/railties-4.1.6/lib/rails/commands/commands_tasks.rb:40:in `run_command!' 
    from /home/weare138/.rvm/gems/ruby-2.1.2/gems/railties-4.1.6/lib/rails/commands.rb:17:in `<top (required)>' 
    from /home/weare138/.rvm/gems/ruby-2.1.2/gems/activesupport-4.1.6/lib/active_support/dependencies.rb:247:in `require' 
    from /home/weare138/.rvm/gems/ruby-2.1.2/gems/activesupport-4.1.6/lib/active_support/dependencies.rb:247:in `block in require' 
    from /home/weare138/.rvm/gems/ruby-2.1.2/gems/activesupport-4.1.6/lib/active_support/dependencies.rb:232:in `load_dependency' 
    from /home/weare138/.rvm/gems/ruby-2.1.2/gems/activesupport-4.1.6/lib/active_support/dependencies.rb:247:in `require' 
    from /home/weare138/app/myapp/bin/rails:8:in `<top (required)>' 
    from /home/weare138/.rvm/gems/ruby-2.1.2/gems/activesupport-4.1.6/lib/active_support/dependencies.rb:241:in `load' 
    from /home/weare138/.rvm/gems/ruby-2.1.2/gems/activesupport-4.1.6/lib/active_support/dependencies.rb:241:in `block in load' 
    from /home/weare138/.rvm/gems/ruby-2.1.2/gems/activesupport-4.1.6/lib/active_support/dependencies.rb:232:in `load_dependency' 
    from /home/weare138/.rvm/gems/ruby-2.1.2/gems/activesupport-4.1.6/lib/active_support/dependencies.rb:241:in `load' 
    from /home/weare138/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require' 
    from /home/weare138/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require' 
    from -e:1:in `<main>'2.1.2 :005 > 

어떻게 수정하나요? 내 나쁜 영어

당신은 당신의 사용자 모델에 이런 식으로 뭔가를 추가 할 필요가
+0

질문 제목에 잘린 것이 아니라 완전한 오류가있을 수 있습니까? – iMacTia

+0

아, 또 다른 것은'사용자'모델에서'att_reader' 또는'attire_' 뭔가를 사용합니까? – iMacTia

+0

ok, 메시지를 업데이트하십시오. 아뇨, attr_reader를 사용하지 않았습니다. 그를 추가해야합니까? – vveare138

답변

0

은 사용자 테이블의 열 remember_token를 찾을 수 없습니다 ActiveRecord::Base 것 같다,이 될 수 있습니다 스키마가 DB와 올바르게 정렬되지 않았습니다. DB를 롤백하고 다시 마이그레이션 한 다음 오류가 수정되었는지 확인하십시오.

0

죄송합니다 : 인해에

attr_accessor :remember_token 
. 
. 
. 
def remember 
    self.remember_token = ... 
    update_attribute(:remember_digest, ...) 
end 
+0

나는 ActiveRecord :: Base를 사용하는 경우 이것이 필요하지 않아야한다고 잘못 말하고 있습니까? – iMacTia