【问题标题】:Rails 4 rake db:seed returns no implicit conversion of nil into StringRails 4 rake db:seed 不返回 nil 到 String 的隐式转换
【发布时间】:2014-03-24 17:55:30
【问题描述】:

运行rake db:seed 输入测试用户时,出现以下错误:

ROLES
rake aborted!
no implicit conversion of nil into String
/Users/joshburns/Code/file-server/db/seeds.rb:10:in `<top (required)>'
/Users/joshburns/.rvm/gems/ruby-2.1.0@file-server/gems/activesupport-4.0.3/lib/active_support/dependencies.rb:223:in `load'
/Users/joshburns/.rvm/gems/ruby-2.1.0@file-server/gems/activesupport-4.0.3/lib/active_support/dependencies.rb:223:in `block in load'
/Users/joshburns/.rvm/gems/ruby-2.1.0@file-server/gems/activesupport-4.0.3/lib/active_support/dependencies.rb:214:in `load_dependency'
/Users/joshburns/.rvm/gems/ruby-2.1.0@file-server/gems/activesupport-4.0.3/lib/active_support/dependencies.rb:223:in `load'
/Users/joshburns/.rvm/gems/ruby-2.1.0@file-server/gems/railties-4.0.3/lib/rails/engine.rb:540:in `load_seed'
/Users/joshburns/.rvm/gems/ruby-2.1.0@file-server/gems/activerecord-4.0.3/lib/active_record/tasks/database_tasks.rb:154:in `load_seed'
/Users/joshburns/.rvm/gems/ruby-2.1.0@file-server/gems/activerecord-4.0.3/lib/active_record/railties/databases.rake:181:in `block (2 levels) in <top (required)>'
Tasks: TOP => db:seed
(See full trace by running task with --trace)

我的种子文件:

puts 'ROLES'
YAML.load(ENV['ROLES']).each do |role|
  Role.find_or_create_by_name(role)
  puts 'role: ' << role
end
puts 'DEFAULT USERS'
user = User.find_or_create_by_email :name => ENV['ADMIN_NAME'].dup, :email => ENV['ADMIN_EMAIL'].dup, :password => ENV['ADMIN_PASSWORD'].dup, :password_confirmation => ENV['ADMIN_PASSWORD'].dup
puts 'user: ' << user.name
user.add_role :admin

【问题讨论】:

  • dup 是干什么用的?你能显示 add_role 的代码吗

标签: ruby-on-rails ruby sqlite gem rake


【解决方案1】:

如果这是你的seeds.db 文件,你为什么要输出字符串?

puts 'ROLES'
puts 'DEFAULT USERS'
puts 'user: ' << user.name

seeds.rb 与 rake 任务、模型和控制器相同 - 它们不会直接向用户呈现任何内容

虽然我们需要查看更多您的代码,但我会这样做:

YAML.load(ENV['ROLES']).each do |role|
  Role.find_or_create_by_name(role)
  puts 'role: ' << role
end
user = User.find_or_create_by_email :name => ENV['ADMIN_NAME'], :email => ENV['ADMIN_EMAIL'], :password => ENV['ADMIN_PASSWORD'], :password_confirmation => ENV['ADMIN_PASSWORD']

user.add_role :admin #-> need to see your method

如果您希望使您的种子.rb 文件具有可读性,您应该使用 cmets 将其拆分

【讨论】:

    猜你喜欢
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2015-10-12
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多