【发布时间】:2015-04-10 22:19:51
【问题描述】:
我在 Rails 中开发了一些运行良好的测试。然后我补充说:
- 在模型文件中:has_secure_password
- 在 Gem 文件中:gem 'bcrypt'、'3.1.7'(捆绑安装后会显示在 Gemfile.lock 中)
- 我将 password_digest 作为字符串添加到迁移文件中(迁移后它确实显示在 schema.rb 中)
我在测试文件中添加了密码和密码确认设置:
def setup
@user = User.new(email: "user@example.com",
username: "example user",
firstname: "Allan",
location: "Europe",
password: "foobar",
password_confirmation: "foobar")
end
现在当我运行 rake test 时,我收到错误消息:
NoMethodError: undefined method 'password_digest=' for #<User:0x00000002f9c020> test/models/user_test.rb:6:in 'setup'.
第 6 行指的是 @user = User.new ... 行。
所以它似乎正确地实现了 gem 和附加列,但我收到了这个错误消息。有谁知道可能是什么原因?
【问题讨论】:
-
您是创建了新的迁移还是修改了现有的迁移?
-
我先运行
bundle exec rake db:migrate VERSION=0,然后运行bundle exec rake db:migrate,但这没有帮助。 -
它并没有真正回答我的问题,所以我假设您更改了现有的迁移。 :) 这将导致您的测试数据库与您的开发数据库不同步。运行
rake db:test:prepare- 它会将您当前的 schema.rb 加载到您的测试数据库中。 -
解决了!还不知道为什么会这样,为什么我所做的还不够,但我会研究一下
rake db:test:prepare究竟做了什么。 -
请添加为答案
标签: ruby-on-rails ruby-on-rails-4 bcrypt-ruby