2

我嘗試通過以下http://bcardarella.com/post/4668842452/exploring-rails-3-1-activemodel-securepassword::加載ActiveModel未定義SecurePassword方法`password_digest =」

使用軌道加載ActiveModel 3.1 :: SecurePassword和我結束了紅燈......

user.rb

class User < ActiveRecord::Base 
    has_secure_password 
    validates :password, :presence => { :on => :create } 
end 

factory.rb

Factory.define :user do |f| 
    f.email "[email protected]" 
    f.password "foobar" 
    f.password_confirmation { |u| u.password } 
end 

spec_user.rb

describe User do 
    it "should authenticate with matching username and password" do 
    user = Factory(:user, :email => '[email protected]', :password => 'secret') 
    User.authenticate('[email protected]', 'secret').should == user 
    end 
end 

,我也得到了紅燈......

Failure/Error: user = Factory(:user, :email => '[email protected]', :password => 'secret') 
NoMethodError: 
    undefined method `password_digest=' for #<User:0xb383460> 

,我認爲這是耙分貝:遷移問題,我期待到軌C,但顯然password_digest定義。

ruby-1.9.2-p180 :007 > a = User.new 
=> #<User id: nil, email: nil, password_digest: nil, is_admin: nil, created_at: nil, updated_at: nil> 
ruby-1.9.2-p180 :008 > a.password_digest = 3 
=> 3 

回答

1

通過

describe User do 
    it "should authenticate with matching username and password" do 
    user = Factory(:user, :email => '[email protected]', :password => 'secret') 
    User.find_by_email('[email protected]').try(:authenticate, 'secret').should == user 
    end 
end