Ruby on rails 在rake任务中使用动态查找器时未定义的保存方法

Ruby on rails 在rake任务中使用动态查找器时未定义的保存方法,ruby-on-rails,csv,import,rake,dynamic-finders,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

我有一个简单的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任务,在同一个模型上使用动态查找器,工作方式也很好。我不知道是什么改变了,或者是什么导致了这一切。如果您有任何想法,我们将不胜感激。

如果您有
项目id
。应该是
@item\u id
?另外,
update\u attributes
会自动保存记录。您不需要调用
save()
。删除该行并查看是否可以消除错误


作为旁注,为什么您有一个名为
Item\u id
的项属性?除非你有很好的理由不使用,
id
会更好。

对不起,item\u id/@item\u id是我将代码添加到StackOveflow时的一个输入错误。