2011-05-17 8 views
8

पोस्ट करने के लिए निर्दिष्ट करते समय मैं यहां एक नुकसान में थोड़ा सा हूं।
मैं बस एक उपयोगकर्ता परिभाषित समय पर, चेकइन में देरी करने की कोशिश कर रहा हूं। मैं इसे यथासंभव सरल बनाना चाहता हूं।
संपादित करें: हल, नीचे देखें।रेल - पैरामीटर में run_at के साथ विशिष्ट विधि का विलंबित नौकरी/

class MyController < ApplicationController 

    def new_checkin 
    # default venue is "SubMate" 
    @venue_id = params[:venue_id] || "4c2c3acd8abca59355760120" 
    @time = params[:time] 
    @checkin = Delayed::Job.enqueue(self.perform_checkin, :run_at => @time.minutes.from_now) 
    end 

    def perform_checkin 
    foursquare.checkins.add(:venueId => @venue_id, :broadcast => "private") 
    end 

परिणाम अजीब है: delayed_job बचाने है, कार्रवाई (@time देरी का अनुरोध के बिना) किया जाता है, और मैं अभी भी कोई त्रुटि मिलती है:

ArgumentError in MyController#new_checkin 
    Cannot enqueue items which do not respond to perform 

मैं क्या याद आ रही है? उपयोगकर्ता ने देरी से अनुरोध किए जाने के साथ, मैं इस देरी की नौकरी कैसे कर सकता हूं?

धन्यवाद!

अद्यतन
धन्यवाद नीचे @Roman के लिए, आप देरी करने के लिए तर्क दे सकते हैं पता नहीं था:

def new_checkin 
    @venue_id = params[:venue_id] 
    @time = params[:time] 
    @checkin = self.perform_checkin 
end 

def perform_checkin 
    foursquare.checkins.delay({:run_at => @time.minutes.from_now}).add(:venueId => @venue_id, :broadcast => "private") 
end 

उत्तर

8

आप इसे इस तरह enqueue है, तो के रूप में त्रुटि का सुझाव चाहते हैं, कतारबद्ध ऑब्जेक्ट का जवाब देना चाहिए: प्रदर्शन करें। यह http://asciicasts.com/episodes/171-delayed-job जांचें आप इसका उपयोग भी कर सकते हैं: handle_asynchronously या .delay.method। इसे जांचें: https://github.com/collectiveidea/delayed_job

+1

धन्यवाद रोमन, मुझे नहीं पता था कि आप तर्क दे सकते हैं। डेले - मैंने अपना प्रश्न अपडेट किया (हल)। – Laurent

संबंधित मुद्दे