Ruby on rails 在rake任务中使用动态查找器时未定义的保存方法
我有一个简单的rake任务,从CSV文件导入记录并将其保存到数据库中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
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时的一个输入错误。