Ruby on rails 通过csv将一行数据导入Rails应用程序
这似乎应该是一个简单的问题,但我被卡住了 我有一个图书模型,希望通过一个csv创建一组图书,该csv有一个ISBN列表。我创建了一个rake任务-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[
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:inraise\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:incall'
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:inload_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:incall'
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:incall'
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:incall'
来自/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:increate\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:insave'
来自/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:inin\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:intransaction'
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:insave'
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:instart'
来自/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:inconsole'
来自/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