작년에 활약하고있는 환상적인 축구 리그 앱이 있는데 시즌이 시작되기 전에 다시 시도 할 시간입니다. 데이터베이스를 지우고 "rake db : migrate"를 수행하여 처음부터 다시 시작할 수있었습니다. 로그인 페이지가 잘 나타나지만 사용자가 내가 로그/production.log에 다음과 같은 오류 얻을 restful_authentication 사용 "가입"할 때 : 여기정의되지 않은 메소드 'make_activation_code'Restful_Authentication을 사용하는 레일 오류
NoMethodError (undefined method `make_activation_code' for #<User:0xb7743490>):
/vendor/rails/activerecord/lib/active_record/attribute_methods.rb:256:in `method_missing'
/vendor/rails/activerecord/lib/../../activesupport/lib/active_support/callbacks.rb:173:in `send'
/vendor/rails/activerecord/lib/../../activesupport/lib/active_support/callbacks.rb:173:in `evaluate_method'
/vendor/rails/activerecord/lib/../../activesupport/lib/active_support/callbacks.rb:161:in `call'
을 내 user.rb 클래스의 일부 조각은 다음과 같습니다
내 user.rb의require 'digest/sha1'
require 'gravtastic'
class User < ActiveRecord::Base
include Authentication
include Authentication::ByPassword
include Authentication::ByCookieToken
# has_one :division
has_and_belongs_to_many :divisions
has_gravatar
validates_presence_of :login
validates_length_of :login, :within => 3..40
validates_uniqueness_of :login, :case_sensitive => false
validates_format_of :login, :with => RE_LOGIN_OK, :message => MSG_LOGIN_BAD
validates_presence_of :team_name
validates_length_of :team_name, :within => 3..40
validates_uniqueness_of :team_name, :case_sensitive => false
# validates_format_of :name, :with => RE_NAME_OK, :message => MSG_NAME_BAD, :allow_nil => true
# validates_length_of :name, :maximum => 100
validates_presence_of :email
validates_length_of :email, :within => 6..100 #[email protected]
validates_uniqueness_of :email, :case_sensitive => false
validates_format_of :email, :with => RE_EMAIL_OK, :message => MSG_EMAIL_BAD
before_create :make_activation_code
# HACK HACK HACK -- how to do attr_accessible from here?
# prevents a user from submitting a crafted form that bypasses activation
# anything else you want your user to change should be added here.
attr_accessible :login, :email, :team_name, :password, :password_confirmation
바닥 :
protected
def make_activation_code
self.activation_code = self.class.make_token
end
def make_password_reset_code
self.reset_password_code = Digest::SHA1.hexdigest(Time.now.to_s.split(//).sort_by {rand}.join)
end
make_activation_code이 사용자 클래스에 정의하고 정의되지 않은 이유를 이해하지 않도록 activation_code가 이전에 만들어졌다.