[英]Rake task not adding CSV to database
我正在嘗試將CSV行添加到表中的記錄中,除了事實上沒有任何實際顯示之外,一切似乎都正常。
這是我的Rake任務:
namespace :csv do
desc "Import CSV Data"
task :c_up => :environment do
require 'csv'
csv_file_path = 'db/main.csv'
CSV.foreach(csv_file_path, :headers => true) do |row|
row = Entry.create!({
:one => row[0],
:two => row[1],
:three => row[2],
:four => row[3],
:five =>row[4],
:six => row[5],
:seven => row[6],
:eight => row[7],
:nine => row[8],
:ten => row[9]
})
row.save
puts "Entry added!"
end
end
end
我的CSV中的標題被命名為與屬性匹配。
當我運行任務時,我沒有收到任何錯誤,並且所有“條目已添加!” 出現在控制台中。 我已經嘗試過沒有row =
和row.save
因為我看過很多沒有這些的例子,但它沒有幫助。
耙子完成后根本沒有任何記錄。 有什么明顯的東西我做錯了嗎? 看來這是我見過的大多數例子。
編輯感謝您的所有答案和評論! 顯然這一直是語法上的缺陷,我將嘗試你的建議,我會在之后更新。 再次感謝!
編輯2結果證明這是一個你們都指出的語法問題,所以給大家+1,謝謝! 我評論它仍然沒有工作的原因是一個無關的問題,如果沒有@jvnill的評論,我不會想到這個問題。
Entry.create!
不需要分配給行也不需要row.save
。 也知道'{}'只是做:
Entry.create!(
:one => row[0],
:two => row[1],
:three => row[2],
:four => row[3],
:five =>row[4],
:six => row[5],
:seven => row[6],
:eight => row[7],
:nine => row[8],
:ten => row[9]
)
create方法將填充行並保存它。
嘗試:
row = Entry.new(
:one => row[0],
:two => row[1],
:three => row[2],
:four => row[3],
:five =>row[4],
:six => row[5],
:seven => row[6],
:eight => row[7],
:nine => row[8],
:ten => row[9]
)
row.save!
沒有{} ,並且保存!
您甚至可以嘗試使用它,使其更簡單:
Entry.create!(row.to_hash)
命名空間:csv do
desc“導入CSV數據”任務:c_up =>:環境做
require 'csv'
csv_file_path = 'db/main.csv'
CSV.foreach(csv_file_path, :headers => true) do |row|
Entry.create!({
:one => row[0],
:two => row[1],
:three => row[2],
:four => row[3],
:five =>row[4],
:six => row[5],
:seven => row[6],
:eight => row[7],
:nine => row[8],
:ten => row[9]
})
end
結束
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.