耙子 db:seed 耙子中止! ActiveRecord::RecordInvalid: 验证失败:电子邮件已被占用

Rake db:seed rake aborted! ActiveRecord::RecordInvalid: Validation failed: Email has already been taken

我是 OneMonth 学习条纹支付的初学者 rails。现在,我正在学习如何创建产品 table 并为数据库播种。到目前为止一切都很顺利,直到我在 运行 rake db: seed

之后遇到问题

Davids-MBP-2:one_month_stripe_payments DKP$ 抽成 db:seed 耙中止! ActiveRecord::RecordInvalid: 验证失败:电子邮件已被占用 /Users/DKP/.rvm/gems/ruby-2.3.0@global/gems/activerecord-4.2.5/lib/active_record/validations.rb:79:in raise_record_invalid' /Users/DKP/.rvm/gems/ruby-2.3.0@global/gems/activerecord-4.2.5/lib/active_record/validations.rb:43:in保存!' /Users/DKP/.rvm/gems/ruby-2.3.0@global/gems/activerecord-4.2.5/lib/active_record/attribute_methods/dirty.rb:29:in save!' /Users/DKP/.rvm/gems/ruby-2.3.0@global/gems/activerecord-4.2.5/lib/active_record/transactions.rb:291:inblock in save!' /Users/DKP/.rvm/gems/ruby-2.3.0@global/gems/activerecord-4.2.5/lib/active_record/transactions.rb:351:in block in with_transaction_returning_status' /Users/DKP/.rvm/gems/ruby-2.3.0@global/gems/activerecord-4.2.5/lib/active_record/connection_adapters/abstract/database_statements.rb:213:in交易中的区块' /Users/DKP/.rvm/gems/ruby-2.3.0@global/gems/activerecord-4.2.5/lib/active_record/connection_adapters/abstract/transaction.rb:184:in within_new_transaction' /Users/DKP/.rvm/gems/ruby-2.3.0@global/gems/activerecord-4.2.5/lib/active_record/connection_adapters/abstract/database_statements.rb:213:in事务' /Users/DKP/.rvm/gems/ruby-2.3.0@global/gems/activerecord-4.2.5/lib/active_record/transactions.rb:220:in transaction' /Users/DKP/.rvm/gems/ruby-2.3.0@global/gems/activerecord-4.2.5/lib/active_record/transactions.rb:348:inwith_transaction_returning_status' /Users/DKP/.rvm/gems/ruby-2.3.0@global/gems/activerecord-4.2.5/lib/active_record/transactions.rb:291:in save!' /Users/DKP/.rvm/gems/ruby-2.3.0@global/gems/activerecord-4.2.5/lib/active_record/persistence.rb:51:increate!' /Users/DKP/Desktop/one_month/one_month_stripe_payments/db/seeds.rb:8:in <top (required)>' /Users/DKP/.rvm/gems/ruby-2.3.0@global/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:268:inload' /Users/DKP/.rvm/gems/ruby-2.3.0@global/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:268:in block in load' /Users/DKP/.rvm/gems/ruby-2.3.0@global/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:240:inload_dependency' /Users/DKP/.rvm/gems/ruby-2.3.0@global/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:268:in load' /Users/DKP/.rvm/gems/ruby-2.3.0@global/gems/railties-4.2.5/lib/rails/engine.rb:547:inload_seed' /Users/DKP/.rvm/gems/ruby-2.3.0@global/gems/activerecord-4.2.5/lib/active_record/tasks/database_tasks.rb:250:in load_seed' /Users/DKP/.rvm/gems/ruby-2.3.0@global/gems/activerecord-4.2.5/lib/active_record/railties/databases.rake:183:inblock (2 levels) in ' /Users/DKP/.rvm/gems/ruby-2.3.0/bin/ruby_executable_hooks:15:in eval' /Users/DKP/.rvm/gems/ruby-2.3.0/bin/ruby_executable_hooks:15:in' 任务:TOP => db:seed (使用 --trace 查看 运行 任务的完整跟踪)

我试过 rake db: reset,然后 rake:db migrate,然后再次 rake db: seed。但我仍然有同样的错误。

谁能帮我解决这个问题?我感觉卡住了,我不知道该怎么做。

非常感谢!

当你做 rake db:reset 时,rails 做的是 rake db:drop -> rake db:create -> rake db:migrate -> rake db:seed

您不需要再rake db:seed

您可以通过执行 rails c 检查您的控制台,看看您的种子数据是否已经在其中。 Product.all

'Email has already been taken' 表示您有一条包含相同电子邮件的记录。

执行 Rails 控制台并检查记录是否存在。 如果不是,则执行 rake db:drop -> rake db:create -> rake db:migrate -> rake db:seed。这将解决您的问题。