seeds.rb 中的无效记录

Invalid record in seeds.rb

我无法找到 seeds.rb 中创建数据方法的问题。我使用 faker gem 来生成数据。 我的代码:

NAZWY_DNI = ['Poniedziałek', 'Wtorek', 'Środa', 'Czwartek', 'Piątek', 'Sobota', 'Niedziela']
60.times do
  WorkSchedule.create!(
    start_time: Faker::Time.forward(1, :morning).strftime("%H:%M"),
    end_time: Faker::Time.forward(1, :afternoon).strftime("%H:%M"),
    day_of_week: NAZWY_DNI[Random.new.rand(0..6)],
    person_id: Faker::Number.between(52, 112)
  )
end
  p "Created #{WorkSchedule.count} work schedules"

工作计划table模型:

# == Schema Information
#
# Table name: work_schedules
#
#  id          :integer          not null, primary key
#  start_time  :time             not null
#  end_time    :time             not null
#  day_of_week :string           not null
#  created_at  :datetime         not null
#  updated_at  :datetime         not null
#  person_id   :integer
#

当我尝试 rake db:migrate 时,出现错误:ActiveRecord::RecordInvalid。你知道我哪里出错了吗?提前致谢。

完整跟踪:

ActiveRecord::RecordInvalid: Nieprawidłowy rekord
/home/lukas/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/validations.rb:79:in `raise_record_invalid'
/home/lukas/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/validations.rb:43:in `save!'
/home/lukas/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/attribute_methods/dirty.rb:29:in `save!'
/home/lukas/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/transactions.rb:291:in `block in save!'
/home/lukas/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/transactions.rb:351:in `block in with_transaction_returning_status'
/home/lukas/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `block in transaction'
/home/lukas/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/abstract/transaction.rb:184:in `within_new_transaction'
/home/lukas/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `transaction'
/home/lukas/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/transactions.rb:220:in `transaction'
/home/lukas/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/transactions.rb:348:in `with_transaction_returning_status'
/home/lukas/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/transactions.rb:291:in `save!'
/home/lukas/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/persistence.rb:51:in `create!'
/home/lukas/Documents/aquapark/db/seeds.rb:84:in `block in <top (required)>'
/home/lukas/Documents/aquapark/db/seeds.rb:83:in `times'
/home/lukas/Documents/aquapark/db/seeds.rb:83:in `<top (required)>'
/home/lukas/.rvm/gems/ruby-2.2.3/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:268:in `load'
/home/lukas/.rvm/gems/ruby-2.2.3/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:268:in `block in load'
/home/lukas/.rvm/gems/ruby-2.2.3/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:240:in `load_dependency'
/home/lukas/.rvm/gems/ruby-2.2.3/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:268:in `load'
/home/lukas/.rvm/gems/ruby-2.2.3/gems/railties-4.2.5.1/lib/rails/engine.rb:547:in `load_seed'
/home/lukas/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/tasks/database_tasks.rb:250:in `load_seed'
/home/lukas/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/railties/databases.rake:183:in `block (2 levels) in <top (required)>'
/home/lukas/.rvm/gems/ruby-2.2.3/gems/rake-10.5.0/lib/rake/task.rb:240:in `call'
/home/lukas/.rvm/gems/ruby-2.2.3/gems/rake-10.5.0/lib/rake/task.rb:240:in `block in execute'
/home/lukas/.rvm/gems/ruby-2.2.3/gems/rake-10.5.0/lib/rake/task.rb:235:in `each'
/home/lukas/.rvm/gems/ruby-2.2.3/gems/rake-10.5.0/lib/rake/task.rb:235:in `execute'
/home/lukas/.rvm/gems/ruby-2.2.3/gems/rake-10.5.0/lib/rake/task.rb:179:in `block in invoke_with_call_chain'
/home/lukas/.rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
/home/lukas/.rvm/gems/ruby-2.2.3/gems/rake-10.5.0/lib/rake/task.rb:172:in `invoke_with_call_chain'
/home/lukas/.rvm/gems/ruby-2.2.3/gems/rake-10.5.0/lib/rake/task.rb:165:in `invoke'
/home/lukas/.rvm/gems/ruby-2.2.3/gems/rake-10.5.0/lib/rake/application.rb:150:in `invoke_task'
/home/lukas/.rvm/gems/ruby-2.2.3/gems/rake-10.5.0/lib/rake/application.rb:106:in `block (2 levels) in top_level'
/home/lukas/.rvm/gems/ruby-2.2.3/gems/rake-10.5.0/lib/rake/application.rb:106:in `each'
/home/lukas/.rvm/gems/ruby-2.2.3/gems/rake-10.5.0/lib/rake/application.rb:106:in `block in top_level'
/home/lukas/.rvm/gems/ruby-2.2.3/gems/rake-10.5.0/lib/rake/application.rb:115:in `run_with_threads'
/home/lukas/.rvm/gems/ruby-2.2.3/gems/rake-10.5.0/lib/rake/application.rb:100:in `top_level'
/home/lukas/.rvm/gems/ruby-2.2.3/gems/rake-10.5.0/lib/rake/application.rb:78:in `block in run'
/home/lukas/.rvm/gems/ruby-2.2.3/gems/rake-10.5.0/lib/rake/application.rb:176:in `standard_exception_handling'
/home/lukas/.rvm/gems/ruby-2.2.3/gems/rake-10.5.0/lib/rake/application.rb:75:in `run'
/home/lukas/.rvm/gems/ruby-2.2.3/gems/rake-10.5.0/bin/rake:33:in `<top (required)>'
/home/lukas/.rvm/gems/ruby-2.2.3/bin/rake:23:in `load'
/home/lukas/.rvm/gems/ruby-2.2.3/bin/rake:23:in `<main>'
/home/lukas/.rvm/gems/ruby-2.2.3/bin/ruby_executable_hooks:15:in `eval'
/home/lukas/.rvm/gems/ruby-2.2.3/bin/ruby_executable_hooks:15:in `<main>'

在您的架构中,start_time/end_time 列的类型是 time。但是,在您的种子中,您有 strftime("%H:%M") 将时间转换为字符串的调用。因此,你不应该调用 strftime.

此外,您可以使用 NAZWY_DNI.sample 而不是 NAZWY_DNI[Random.new.rand(0..6)],它会随机选择一天。而不是 Faker::Number.between(52, 112) 只需使用 rand(52, 112).

我发现了问题所在。在模型 work_schedule.rb 中,我进行了以下验证:

validates_uniqueness_of :day_of_week, scope: :person_id

当我评论这一行时,种子已加载。