2

我正在阅读 Michael Hartl 的教程(一个很好的教程!),我在第 6 章第 6.3 节添加安全密码中遇到了障碍。

教程说“将密码和 *password_confirmation* 添加到用户模型......密码属性将是虚拟的” - 这可能就是为什么没有迁移将它们添加到数据库模式的原因。

但是,除非将它们添加到 user.rb 中 attr_accessible 行的末尾,否则我会收到 MassAssignmentSecurity 错误,但是当我添加它们时,我会收到一个

UnknownAttributeError:
   unknown attribute: password

github 上的 user.rb 代码将属性添加到 attr_accessible 但其余代码(也在 user_spec.rb 中)是相同的,除了我想在后面的章节中添加的内容。

我第二次浏览了这一章,从头开始,认为这是我的错误,但它仍然存在......

安装的宝石是

Using rake (0.9.2.2) 
Using i18n (0.6.0) 
Using multi_json (1.3.2) 
Using activesupport (3.2.3) 
Using builder (3.0.0) 
Using activemodel (3.2.3) 
Using erubis (2.7.0) 
Using journey (1.0.3) 
Using rack (1.4.1) 
Using rack-cache (1.2) 
Using rack-test (0.6.1) 
Using hike (1.2.1) 
Using tilt (1.3.3) 
Using sprockets (2.1.3) 
Using actionpack (3.2.3) 
Using mime-types (1.18) 
Using polyglot (0.3.3) 
Using treetop (1.4.10) 
Using mail (2.4.4) 
Using actionmailer (3.2.3) 
Using arel (3.0.2) 
Using tzinfo (0.3.33) 
Using activerecord (3.2.3) 
Using activeresource (3.2.3) 
Using addressable (2.2.7) 
Using annotate (2.4.1.beta1) 
Using bcrypt-ruby (3.0.1) 
Using bootstrap-sass (2.0.0) 
Using nokogiri (1.5.2) 
Using ffi (1.0.11) 
Using childprocess (0.3.2) 
Using libwebsocket (0.1.3) 
Using rubyzip (0.9.8) 
Using selenium-webdriver (2.21.2) 
Using xpath (0.1.4) 
Using capybara (1.1.2) 
Using coffee-script-source (1.3.1) 
Using execjs (1.3.1) 
Using coffee-script (2.2.0) 
Using rack-ssl (1.3.2) 
Using json (1.7.0) 
Using rdoc (3.12) 
Using thor (0.14.6) 
Using railties (3.2.3) 
Using coffee-rails (3.2.2) 
Using diff-lcs (1.1.3) 
Using guard (1.0.1) 
Using guard-rspec (0.5.5) 
Using spork (0.9.0) 
Using guard-spork (0.3.2) 
Using jquery-rails (2.0.0) 
Using libnotify (0.5.9) 
Using bundler (1.1.3) 
Using rails (3.2.3) 
Using rb-inotify (0.8.8) 
Using rspec-core (2.9.0) 
Using rspec-expectations (2.9.1) 
Using rspec-mocks (2.9.0) 
Using rspec (2.9.0) 
Using rspec-rails (2.9.0) 
Using sass (3.1.16) 
Using sass-rails (3.2.5) 
Using sqlite3 (1.3.5) 
Using uglifier (1.2.3)

感谢您对我下一步的任何帮助或指示,

克里斯

4

5 回答 5

2

在按照教程进行操作时,我遇到了同样的问题,然后我注意到我忘记在调用has_secure_password下方添加attr_accessible调用app/models/user.rb

class User < ActiveRecord::Base
  attr_accessible :email, :name, :password, :password_confirmation
  has_secure_password
  // rest of the code
end

UnknownAttributeError我完成之后,它消失了,所有测试都通过了。

于 2012-10-16T01:00:36.537 回答
1

您可以像这样在模型中定义虚拟属性:

attr_accessor :password, :password_confirmation
于 2012-04-29T20:48:10.817 回答
0

after modifying the user.rb file with attribute accessible for password and password_confirmaton

class User < ActiveRecord::Base
  attr_accessible :name, :email, :password, :password_confirmation
  has_secure_password
  .
  .
  .
end

don't forget to save it!

于 2013-02-26T05:13:11.970 回答
0

根据您所在的 6.3 小节,测试可能会失败。它们应该首先失败,然后您通过添加代码开始“修复”它们。has_secure_password在 6.3.4 中,您通过添加到 user.rb 来解决您描述的问题

于 2012-05-01T13:33:17.527 回答
0

答案很有帮助,attr_accessor :password, :password_confirmation但我看到密码为零。Bcrypt gem 是以下版本:'bcrypt', '~> 3.1.7'

class User < ApplicationRecord
  attr_accessor :password, :password_confirmation
  has_secure_password

end
于 2021-08-17T00:57:51.853 回答