Ruby on rails 通过csv将一行数据导入Rails应用程序

Ruby on rails 通过csv将一行数据导入Rails应用程序,ruby-on-rails,ruby,csv,Ruby On Rails,Ruby,Csv,这似乎应该是一个简单的问题,但我被卡住了 我有一个图书模型,希望通过一个csv创建一组图书,该csv有一个ISBN列表。我创建了一个rake任务- task :import_books => :environment do CSV.foreach('lib/books.csv', :headers => true, :encoding => 'ISO-8859-1:UTF-8') do |row| Book.create!({:isbn => row[

这似乎应该是一个简单的问题,但我被卡住了

我有一个图书模型,希望通过一个csv创建一组图书,该csv有一个ISBN列表。我创建了一个rake任务-

task :import_books => :environment do
    CSV.foreach('lib/books.csv', :headers => true, :encoding => 'ISO-8859-1:UTF-8') do |row|
      Book.create!({:isbn => row[0]})
    end
end
但是我得到了以下错误-

ActionController::UrlGenerationError:没有路由匹配{:action=>“show”,:controller=>“books”,:id=>nil}缺少必需的键:[:id]

fwiw,从控制台,我可以使用Model.create在所有其他模型中创建记录,但不能使用Book

我试着在一个id中硬编码,但它不起作用,看起来也不理想

谢谢你的帮助

编辑-

图书迁移(您是指模式吗?)-

Book.new和Book.create from控制台-

2.1.2:005>Book.new => # 2.1.2:006>Book.create (10.2ms)开始交易 SQL(3.4ms)插入“账簿”(“创建时间”、“更新时间”)值(?,)[[“创建时间”、“2015-01-26 17:50:11.119126”],[“更新时间”、“2015-01-26 17:50:11.119126”] (1.1ms)回滚事务 ActionController::UrlGenerationError:没有路由匹配{:action=>“show”,:controller=>“books”,:id=>nil}缺少必需的键:[:id] 来自/Users/danifank/.rvm/gems/ruby-2.1.2/gems/actionpack-4.1.7/lib/action\u dispatch/routing/route\u set.rb:219:in
raise\u generation\u error'
from/Users/danifank/.rvm/gems/ruby-2.1.2/gems/actionpack-4.1.7/lib/action\u dispatch/routing/route\u set.rb:192:in
optimized\u helper' 来自/Users/danifank/.rvm/gems/ruby-2.1.2/gems/actionpack-4.1.7/lib/action\u dispatch/routing/route\u set.rb:178:in
call'
from/Users/danifank/.rvm/gems/ruby-2.1.2/gems/actionpack-4.1.7/lib/action\u dispatch/routing/route\u set.rb:270:in
块(2层)中的define\u url\u helper' from/Users/danifank/Documents/coverlist/app/models/book.rb:124:in
load_to_soulmate'
来自/Users/danifank/.rvm/gems/ruby-2.1.2/gems/activesupport-4.1.7/lib/active\u support/callbacks.rb:424:in
在make\u lambda'中阻塞 来自/Users/danifank/.rvm/gems/ruby-2.1.2/gems/activesupport-4.1.7/lib/active\u support/callbacks.rb:221:in
call'
from/Users/danifank/.rvm/gems/ruby-2.1.2/gems/activesupport-4.1.7/lib/active\u support/callbacks.rb:221:in
block in-halting\u和\u-conditional' 来自/Users/danifank/.rvm/gems/ruby-2.1.2/gems/activesupport-4.1.7/lib/active\u support/callbacks.rb:215:in
call'
from/Users/danifank/.rvm/gems/ruby-2.1.2/gems/activesupport-4.1.7/lib/active\u support/callbacks.rb:215:in
block in-halting\u和\u-conditional' 来自/Users/danifank/.rvm/gems/ruby-2.1.2/gems/activesupport-4.1.7/lib/active\u support/callbacks.rb:86:in
call'
来自/Users/danifank/.rvm/gems/ruby-2.1.2/gems/activesupport-4.1.7/lib/active\u support/callbacks.rb:86:in
run\u callbacks' 来自/Users/danifank/.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.7/lib/active\u record/callbacks.rb:302:in
create\u或\u update'
from/Users/danifank/.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.7/lib/active\u record/persistence.rb:103:in
save' 来自/Users/danifank/.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.7/lib/active\u record/validations.rb:51:in
save'
来自/Users/danifank/.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.7/lib/active\u record/attribute\u methods/dirty.rb:21:in
save' ... 3级。。。 来自/Users/danifank/.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.7/lib/active\u record/connection\u adapters/abstract/database\u statements.rb:209:in
in\u new\u transaction'
来自/Users/danifank/.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.7/lib/active\u record/connection\u adapters/abstract/database\u statements.rb:201:in
transaction' from/Users/danifank/.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.7/lib/active\u record/transactions.rb:208:in
transaction'
from/Users/danifank/.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.7/lib/active\u record/transactions.rb:326:in
,其中\u transaction\u返回\u状态' 来自/Users/danifank/.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.7/lib/active\u record/transactions.rb:268:in
保存中的块
from/Users/danifank/.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.7/lib/active\u record/transactions.rb:283:in
rollback\u active\u record\u state!' 来自/Users/danifank/.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.7/lib/active\u record/transactions.rb:267:in
save'
from/Users/danifank/.rvm/gems/ruby-2.1.2/gems/activerecord-4.1.7/lib/active\u record/persistence.rb:34:in
create' 来自(irb):6 来自/Users/danifank/.rvm/gems/ruby-2.1.2/gems/railties-4.1.7/lib/rails/commands/console.rb:90:in
start'
来自/Users/danifank/.rvm/gems/ruby-2.1.2/gems/railties-4.1.7/lib/rails/commands/console.rb:9:in
start' 来自/Users/danifank/.rvm/gems/ruby-2.1.2/gems/railties-4.1.7/lib/rails/commands/commands\u tasks.rb:69:in
console'
来自/Users/danifank/.rvm/gems/ruby-2.1.2/gems/railties-4.1.7/lib/rails/commands/commands\u tasks.rb:40:in
run\u command!' 来自/Users/danifank/.rvm/gems/ruby-2.1.2/gems/railties-4.1.7/lib/rails/commands.rb:17:in
'
从箱子/轨道:4:in
require'
从bin/rails:4:in`'2.1.2:007>

可以发布图书迁移文件,以及从rails控制台发布的
book.new
。刚刚添加了--book.new works,但是当我尝试b=book.new后跟b.update\u参数时,我得到了相同的错误您有任何挂起的迁移吗No,我没有任何它似乎你在你的书模型中有一个回调调用load_to_soulmate(大约Book.rb:124),这反过来又试图使用一些路由助手。如果您注释掉书本回调(即保存后、创建后),您可能会发现保存操作没有错误。
create_table "books", force: true do |t|
    t.string   "title"
    t.string   "author"
    t.text     "description"
    t.string   "link"
    t.integer  "score"
    t.boolean  "featured"
    t.datetime "created_at",         null: false
    t.datetime "updated_at",         null: false
    t.integer  "user_id"
    t.boolean  "likes"
    t.string   "cover_file_name"
    t.string   "cover_content_type"
    t.integer  "cover_file_size"
    t.datetime "cover_updated_at"
    t.string   "image_remote_url"
    t.string   "cover_url"
    t.string   "fake_cover"
    t.boolean  "permission"
    t.date     "release"
    t.string   "isbn"
  end