Helena
Helena

Reputation: 951

Seed file error in Ruby on Rails

I have a seed file to seed some test data into my system.

fnames = ["Adam", "Benjamin", "Caleb", "Daniel", "Frank", "Gideon"]
lnames = ["Smith", "Jones", "Washington", "Jefferson", "Gardener", 
"Cooper"]
Student.delete_all
3.times do
  nickname = fnames[rand(6)]
  name = nickname + " " + lnames[rand(6)]
  email = (name + "@foobar.com").gsub(" ", "")
  Student.create(name: name, email: email, nickname: nickname)
end

Task.delete_all
task_list = [
  [ "First", 540 ],
  [ "Second", 850 ],
  [ "Third", 905 ],
  [ "Fourth", 80000 ]
]

Work.delete_all

task_list.each do |description, points|
  work = Work.create
  task = Task.create( description: description, points: points )
  student = Student.first
  student.works << work
  student.save
  work.task = task
  work.save
end

But if I run it then I get this error:

rails@rails-VirtualBox:~/rails_projects/rails-for-business$ rake db:seed
[RailsAdmin] RailsAdmin initialization disabled by default. Pass SKIP_RAILS_ADMIN_INITIALIZER=false if you need it.
rake aborted!
undefined method `works' for nil:NilClass
/home/rails/rails_projects/rails-for-business/db/seeds.rb:34:in `block in <top (required)>'
/home/rails/rails_projects/rails-for-business/db/seeds.rb:30:in `each'
/home/rails/rails_projects/rails-for-business/db/seeds.rb:30:in `<top (required)>'
/home/rails/.rvm/gems/ruby-2.0.0-p247@railstutorial_rails_4_0/gems/activesupport-4.0.0/lib/active_support/dependencies.rb:222:in `load'
/home/rails/.rvm/gems/ruby-2.0.0-p247@railstutorial_rails_4_0/gems/activesupport-4.0.0/lib/active_support/dependencies.rb:222:in `block in load'
/home/rails/.rvm/gems/ruby-2.0.0-p247@railstutorial_rails_4_0/gems/activesupport-4.0.0/lib/active_support/dependencies.rb:213:in `load_dependency'
/home/rails/.rvm/gems/ruby-2.0.0-p247@railstutorial_rails_4_0/gems/activesupport-4.0.0/lib/active_support/dependencies.rb:222:in `load'
/home/rails/.rvm/gems/ruby-2.0.0-p247@railstutorial_rails_4_0/gems/railties-4.0.0/lib/rails/engine.rb:540:in `load_seed'
/home/rails/.rvm/gems/ruby-2.0.0-p247@railstutorial_rails_4_0/gems/activerecord-4.0.0/lib/active_record/tasks/database_tasks.rb:153:in `load_seed'
/home/rails/.rvm/gems/ruby-2.0.0-p247@railstutorial_rails_4_0/gems/activerecord-4.0.0/lib/active_record/railties/databases.rake:181:in `block (2 levels) in <top (required)>'
/home/rails/.rvm/gems/ruby-2.0.0-p247@railstutorial_rails_4_0/bin/ruby_executable_hooks:15:in `eval'
/home/rails/.rvm/gems/ruby-2.0.0-p247@railstutorial_rails_4_0/bin/ruby_executable_hooks:15:in `<main>'
Tasks: TOP => db:seed
(See full trace by running task with --trace)

I can't find the bug in it. Since it is a collaborative project I don't know how the tables in the database itself are connected.

Upvotes: 3

Views: 1813

Answers (2)

Helena
Helena

Reputation: 951

Ok, so here was the problem. My Student record wasn't being created, so I followed the advice left in the comments and added a ! after create.

Student.create!(name: name, email: email, nickname: nickname)

This informed me when trying to seed that I was leaving a required password field empty. So I changed

Student.create(name: name, email: email, nickname: nickname, password: "foobar")

and the seed file was working fine

Upvotes: 1

Marek Lipka
Marek Lipka

Reputation: 51151

It seems your Student records don't get created (so, Student.first returns nil). I guess you should check for validation errors.

Upvotes: 4

Related Questions