在rake任务中使用动态查找程序时的未定义保存方法

时间:2011-10-10 08:16:45

标签: ruby-on-rails csv import rake dynamic-finders

我有一个简单的rake任务从CSV文件导入记录并将它们保存到数据库中。

require 'csv'

namespace :import do
  task :items => :environment do

  CSV.foreach(Rails.root.to_s + '/public/data/items.csv', :headers => true) do |row|

   @item_id = row[1]

   if item_id
    i = Item.find_or_create_by_item_id(@item_id)
    i.update_attributes(
      :item_id     => @item_id,
      :category    => row[2],
      :price       => row[3],
    )
    i.save
   end

  end

 end
end

当我运行它时,我收到以下错误。

rake aborted!
undefined method `save' for []:ActiveRecord::Relation

这工作正常,我在同一模型上使用动态查找器进行其他rake任务,工作方式相同。我无法弄清楚改变了什么或导致了什么。任何想法都将不胜感激。

1 个答案:

答案 0 :(得分:1)

你有if item_id。那应该是@item_id吗?此外,update_attributes会自动保存记录。您无需致电save()。删除该行,看看是否摆脱了错误。

作为旁注,为什么你有一个名为item_id的项的属性?除非你有充分的理由不这样做,否则使用id会好得多。