2013-11-20 2 views
3

시스템에 테스트 데이터를 입력하기위한 시드 파일이 있습니다. 내가 거기에 버그를 찾을 수 없습니다Ruby on Rails의 시드 파일 오류

[email protected]:~/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/[email protected]_rails_4_0/gems/activesupport-4.0.0/lib/active_support/dependencies.rb:222:in `load' 
/home/rails/.rvm/gems/[email protected]_rails_4_0/gems/activesupport-4.0.0/lib/active_support/dependencies.rb:222:in `block in load' 
/home/rails/.rvm/gems/[email protected]_rails_4_0/gems/activesupport-4.0.0/lib/active_support/dependencies.rb:213:in `load_dependency' 
/home/rails/.rvm/gems/[email protected]_rails_4_0/gems/activesupport-4.0.0/lib/active_support/dependencies.rb:222:in `load' 
/home/rails/.rvm/gems/[email protected]_rails_4_0/gems/railties-4.0.0/lib/rails/engine.rb:540:in `load_seed' 
/home/rails/.rvm/gems/[email protected]_rails_4_0/gems/activerecord-4.0.0/lib/active_record/tasks/database_tasks.rb:153:in `load_seed' 
/home/rails/.rvm/gems/[email protected]_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/[email protected]_rails_4_0/bin/ruby_executable_hooks:15:in `eval' 
/home/rails/.rvm/gems/[email protected]_rails_4_0/bin/ruby_executable_hooks:15:in `<main>' 
Tasks: TOP => db:seed 
(See full trace by running task with --trace) 

: 다음 그것을 실행하는 경우

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 

는하지만이 오류가 발생합니다. 공동 작업 프로젝트이므로 데이터베이스 자체의 테이블이 어떻게 연결되는지는 알 수 없습니다.

+3

잘 작동했다. 즉시 문제가 표시됩니다. – gotva

답변

1

좋아, 여기에 문제가있다. 내 학생 기록이 작성되지 않았기 때문에 의견에 남겨진 조언을 따르고 a! 창조 한 후에.

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

이렇게하면 필수 비밀번호 입력란을 비워 두려고한다는 사실을 알려줍니다. 그래서

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

을 변경하고 시드 파일은 내가`사용하는 것이 좋습니다!`방법에 씨앗`save`,`create`을

4

Student 레코드가 생성되지 않습니다 (따라서 Student.firstnil을 반환합니다). 난 당신이 유효성 검사 오류를 확인해야 할 것 같아요.