【问题标题】:Ruby on Rails tutorial: section 6.3 -- unknown attribute errorRuby on Rails 教程:第 6.3 节——未知属性错误
【发布时间】:2012-04-29 20:43:20
【问题描述】:

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

教程说“将 password 和 *password_confirmation* 添加到用户模型......密码属性将是 virtual”——这可能就是为什么没有迁移以将它们添加到数据库架构中。

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

UnknownAttributeError:
   unknown attribute: password

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

我已经第二遍了这一章,从头开始,以为是我的错误,但它仍然存在......

安装的gem是

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)

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

克里斯

【问题讨论】:

    标签: ruby-on-rails ruby railstutorial.org


    【解决方案1】:

    我在学习本教程时遇到了同样的问题,然后我注意到我忘记在app/models/user.rb 中的attr_accessible 调用下方添加对has_secure_password 的调用。

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

    UnknownAttributeError 不见了,我完成后所有测试都通过了。

    【讨论】:

      【解决方案2】:

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

      attr_accessor :password, :password_confirmation
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          修改 user.rb 文件后,其属性可用于密码和密码确认

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

          别忘了保存!

          【讨论】:

            【解决方案5】:

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

            class User < ApplicationRecord
              attr_accessor :password, :password_confirmation
              has_secure_password
            
            end
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-03-28
              • 1970-01-01
              • 1970-01-01
              • 2015-11-13
              相关资源
              最近更新 更多