Ruby on rails 新记录中缺少密码摘要

Ruby on rails 新记录中缺少密码摘要,ruby-on-rails,Ruby On Rails,我想很多人都问过这个问题,但不幸的是,我不理解他们给出的答案。基本上,我需要你们说,“这就是你们需要粘贴的代码”,然后解释给我听,因为坦白说,我不明白 好吧,问题来了。我正在为我的用户模型运行测试,结果如下: 1) User return value of authenticate method with valid password Failure/Error: before { @user.save } RuntimeError: Password digest missing

我想很多人都问过这个问题,但不幸的是,我不理解他们给出的答案。基本上,我需要你们说,“这就是你们需要粘贴的代码”,然后解释给我听,因为坦白说,我不明白

好吧,问题来了。我正在为我的用户模型运行测试,结果如下:

1) User return value of authenticate method with valid password 
 Failure/Error: before { @user.save }
 RuntimeError:
   Password digest missing on new record
 # ./spec/models/user_spec.rb:61:in `block (3 levels) in <top (required)>'

2) User return value of authenticate method with invalid password 
 Failure/Error: before { @user.save }
 RuntimeError:
   Password digest missing on new record
 # ./spec/models/user_spec.rb:61:in `block (3 levels) in <top (required)>'

3) User return value of authenticate method with invalid password 
 Failure/Error: before { @user.save }
 RuntimeError:
   Password digest missing on new record
 # ./spec/models/user_spec.rb:61:in `block (3 levels) in <top (required)>'
这是我的用户模型:

class User < ActiveRecord::Base
attr_accessible :first, :last, :email, :password, :password_confirmation
attr_accessor :password, :password_confirmation
has_secure_password

before_save { self.email = email.downcase }
validates :first, :last, presence: true, length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[andover]+\.[edu]+\z/i
validates :email, presence:   true,
                format:     { with: VALID_EMAIL_REGEX },
                uniqueness: { case_sensitive: false }
validates :password, length: { minimum: 6 }
end
我不会因为发布模式而浪费更多空间,但我想说的是,我把它放在了模式中:t.string“password\u digest”。我知道这对一些人来说是个问题,因为他们已经停止了


你的想法?

解决方案:

从您的
用户
型号中删除
attr\u访问者:密码、:密码确认

原因:

首先,了解
attr\u accessor
attr\u accessable
之间的区别-关于这一点已有很多很好的解释,例如:

ruby一次解释一行
用户
模型时,它会:

attr_accessible :first, :last, :email, :password, :password_confirmation
这很好……直到下一行:

attr_accessor :password, :password_confirmation
当它覆盖
:password
:password\u confirmation
属性以使它们成为
attr\u访问者时

这就是为什么在调用
@user.save


希望对您有所帮助。

我想说您需要从您的
用户
型号中删除
attr\u访问器:密码,:密码确认
。谢谢谢谢谢谢!那是几个小时的工作终于解决了!我终于可以继续制作联接表了。Foreverindebted没问题!:)-我会写一个完整的答案来解释为什么会这样。@user225325如果这个答案是正确的,并且解决了这个问题,那么请接受,谢谢=)
attr_accessible :first, :last, :email, :password, :password_confirmation
attr_accessor :password, :password_confirmation