Неопределенный метод сохранения при использовании динамических искателей в задаче rake - PullRequest
0 голосов
/ 10 октября 2011

У меня есть простая задача 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

Это работало нормально, и у меня есть другие грабли, использующие динамические искатели на той же модели, которые работают нормально. Я не могу понять, что изменилось или что вызывает это. Любые идеи будут с благодарностью.

1 Ответ

1 голос
/ 10 октября 2011

У вас есть if item_id.Это должно быть @item_id?Также update_attributes автоматически сохраняет запись.Вам не нужно звонить save().Удалите эту строку и посмотрите, избавится ли она от ошибки.

В качестве примечания, почему у вас есть атрибут для элемента с именем item_id?Было бы намного лучше просто использовать id, если у вас нет действительно веских причин не делать этого.

...