0
desc "This task is called by the Heroku scheduler add-on"
task :queue => :environment do
  puts "Updating feed..."
  @books = Book.all
  @books.update_queue
  puts "done."
end

上記のコードは、scheduler.rakelib/tasks にあるというファイルにあります。実行すると、次のようrake queueになります。

Updating feed...
rake aborted!
undefined method `update_queue' for #<Array:0x007ff07eb3ffd0>

そのメソッドは、私の Books モデルで次のように定義されています。

def update_queue
    days_gone = (Date.parse(:new_books.last.created_at.to_s) - Date.today).to_i

    unless days_gone > -7
        new_book = self.user.books.latest_first.new_books.last
        new_book.move_from_queue_to_reading
        user.books.reading_books.move_from_reading_to_list
    else
        self.user.books.create(:title => "Sample book", :reading => 1)
    end
  end

これは本にアクセスしていないだけなので、この未定義のエラーが発生するのはなぜですか? ここで何が間違っていますか?各本のレコードを更新したいだけです。

4

1 に答える 1

2

エラー メッセージに示されているように、配列に対してインスタンス メソッドを実行することはできません。Book.allbooks テーブル内のすべてのアイテムの配列を返します。これを機能させるには、配列内の各インスタンスをループする必要があります。これは 2 つの方法のいずれかで実行できます。

標準ブロック構文の場合:

@books.each do |book|
  book.update_queue
end

またはsend メソッドを使用して

Book.all.each.send(:update_queue)

どちらの方法でも同じことを達成する必要があります。

于 2012-12-31T23:27:38.683 に答える