更新3:看来这是特定于.yml.erb中的固定装置的-即使我没有模板代码,似乎yml.erb文件中的固定装置也没有加载。具有简单的.yml文件即可。这可能与设计本身无关。

注意:有关相关更改,请参见Update 3注释。

我需要在Rails应用程序中生成Devise用户。我注意到,清除数据库并加载固定装置会加载所有其他固定装置,但Devise用户除外(更新3:位于.yml.erb文件中)。

我已经看过this other thread,但是我尝试了那里的所有选项,但似乎仍然没有加载灯具。

# ../fixtures/users.yml.erb
user1:
  email: [email protected]
  name: user1
  encrypted_password: <%= Devise.bcrypt(User, 'passw0rd!') %>
  # also tried encrypted_password: User.new(password_salt: '$2a$10$PoBe1MvkoGJsjMVTEjKqge').send(:password_digest, 'somepassword')
  admin: true


从控制台:

要清除测试数据库:

$ bundle exec rake db:schema:load RAILS_ENV=test


要将灯具加载到测试数据库中:

$ bundle exec rake db:fixtures:load RAILS_ENV=test


在测试中运行Rails控制台(未找到用户,但正在加载其他模型装置(如App)):

$ rails c test
Loading test environment (Rails 4.1.5)
irb(main):001:0> User.first
  User Load (0.1ms)  SELECT  "users".* FROM "users"   ORDER BY "users"."id" ASC LIMIT 1
=> nil
irb(main):002:0> App.first
  App Load (0.1ms)  SELECT  "apps".* FROM "apps"   ORDER BY "apps"."id" ASC LIMIT 1
=> #<App id: 953336129,...>


更新1:还尝试传递从控制台生成的加密密码,但仍然找不到用户记录:

admin:
  email: [email protected]
  name: user1
  encrypted_password: $2a$04$DR0.2yfWwD8AZlyeXx0gEuk2Qh.cNLF4cir0ZUB1iW7hwQhK/IfcC
  admin: true


更新2:当我将灯具文件重命名为users.yml时,它可以工作。重命名为users.yml.erb似乎是罪魁祸首。顺便说一句,在控制台和rake test上可以看到相同的行为(即,它与.yml一起使用,但不适用于yml.erb)。

最佳答案

您也应该以纯文本形式传递密码。我确定有一个用户模型验证错误,阻止您创建夹具用户。这是我的用户固定装置有效的示例:

tom:
  first_name: Tom
  last_name: Test
  email: [email protected]
  password: 123greetings
  encrypted_password: <%= User.new.send(:password_digest, '123greetings') %>


如果仍然失败,请检查log/test.log文件中是否有错误,并检查缺少的必填字段或您在用户模型中设置的其他验证规则。

更新:
事实证明,作者自己发现了此问题,使用的是.yml.erb文件扩展名而不是.yml,这使rails绕过了Fixture文件。 ERB在yml固定装置中工作,因为Rails在解析之前通过ERB运行固定装置文件。

关于ruby-on-rails - 如何在rails(4.1.5)中以yml.erb的方式创建夹具(对于Devise用户)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26644712/

10-15 21:44