有點混亂,我在這裏試圖讓這個工作。 我有一個商店的產品數據庫。 我給出的是一個CSV文件,包含3列和500多個條目,ts_code cost_price和sell_price。Rails 4 rake任務來更新記錄。通過ts_code查找並使用CSV進行更新
所以我需要一個可以運行的任務,找到所有匹配ts_code的產品,然後更新這些產品的cost_price和sell_price。
我試着編輯我用來導入產品的任務,如下所示。
原始任務
require 'csv'
desc "Imports a CSV file into an ActiveRecord table"
task :import, [:filename] => :environment do
CSV.foreach('csv/vow.csv', :headers => true) do |row|
Spree::Product.create!(row.to_hash)
end
end
我希望像這樣的工作,但現在我卡住了。
require 'csv'
desc "Imports a CSV file into an ActiveRecord table"
task :update, [:filename] => :environment do
CSV.foreach('csv/vow.csv', :headers => true) do |row|
a = Spree::Product.find_by(:ts_code)
Spree::Product.update_all!(a, row.to_hash)
end
end
我也知道我需要告訴它來更新哪些列,但我不知道從哪裏把他們像成本&出售價格。 如果任何人都可以提供幫助,那會很棒。
仍然試圖讓這個工作以某種方式,接下來我嘗試的是這個,但得到一個錯誤未定義的方法find_by。不知何故,語法錯了,不知道我有多接近。
require 'csv'
desc "Imports a CSV file into an ActiveRecord table"
task :update, [:filename] => :environment do
CSV.foreach('csv/recharge_pricing.csv', :headers => true) do |row|
product = find_by(ts_code: row["ts_code"]) || new
parameters = ActionController::Parameters.new(row.to_hash)
product.update(parameters.permit(:cost_price,:price))
product.save!
end
end
非常感謝您的幫助Brian多數民衆贊成在工作,我感謝它! – shaneklive