2017-04-13 24 views
1

内のオブジェクトとメソッドが利用できない私持っていることは、以下のresque・スケジューラtweet_scheduler.ymlResqueワーカー:労働者

tweet_senderによってschedueledます

class TweetSender 
    @queue = :tweets_queue 

     def self.perform(tweet_id) 
      message = Tweet.where(:status_id => 0).order(:created_at, :id).limit(1) 
      message.update_attribute(status_id = 1) 
      $client.update(message.text) 

     end 
end 

私のWebアプリで、次の作業員:

彼はresque.rakeによって定義されます。

require 'resque/tasks' 
require 'resque/scheduler/tasks' 
task 'resque:setup' => :environment 

namespace :resque do 
    task :setup do 
    require 'resque' 


    end 

    task :setup_schedule => :setup do 
    require 'resque-scheduler' 
    Resque.schedule = YAML.load_file('tweet_schedule.yml') 
    require 'jobs' 
end 
task :scheduler => :setup_schedule 
end 
私は次のエラー

Exception 
NoMethodError 
Error 
undefined method `update_attribute' for #<Tweet::ActiveRecord_Relation:0x839ca814> 
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activerecord-4.2.0/lib/active_record/relation/delegation.rb:136:in `method_missing' 
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activerecord-4.2.0/lib/active_record/relation/delegation.rb:99:in `method_missing' 
/home/jan/Documents/social/app/jobs/tweet_sender.rb:6:in `perform' 

を取得resque Webインタフェースで

私はALOSそうのようなupdate_atttribute方法なしtweet_sender.rbを実装してみました:

class TweetSender 
    @queue = :tweets_queue 

     def self.perform(tweet_id) 
      message = Tweet.where(:status_id => 0).order(:created_at, :id).limit(1) 
      message.status_id = 1 
      message.save 
      $client.update(message.text) 

     end 
end 

そして、次のエラーを取得:

Exception 
NoMethodError 
Error 
undefined method `status_id=' for #<Tweet::ActiveRecord_Relation:0x83195bf8> 
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activerecord-4.2.0/lib/active_record/relation/delegation.rb:136:in `method_missing' 
/home/jan/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activerecord-4.2.0/lib/active_record/relation/delegation.rb:99:in `method_missing' 
/home/jan/Documents/social/app/jobs/tweet_sender.rb:6:in `perform' 

なぜ私の方法と標準のレールは私の労働者に利用できないのですか?明示的にどこかでそれらを要求する必要がありますか?

答えて

1

limitは、ActiveRecord::Relationのインスタンスを返します。

本当に取得したいのは、Tweetモデルのインスタンスです。

使用first

message = Tweet.where(status_id: 0).order(:created_at, :id).first 
+0

は理にかなっている、あなたに感謝します。 私はまだゼロのため '' 例外 NoMethodError エラー 未定義のメソッド 'STATUS_ID = 'かかわらず、彼のエラーを取得:' 実行' /home/jan/Documents/social/app/jobs/tweet_sender.rb:6:in NilClass ' 今はクラスを認識しません。何か案は? – Jan

+0

@Janこれは 'first'があなたに' nil'を返したことを意味します。つまり、クエリ条件を満たす結果はありません。 –

+1

@AndreyDeneikoあなたが正しいです、私のデータベースに対応するエントリがありませんでした!ありがとうございます – Jan

関連する問題