9

के एक परिदृश्य लेते हैं:रेलवे में समय-समय पर मूल्य लाने/अपडेट करने के लिए कैसे?

counter 10 seconds 
  • उपयोगकर्ता show.html.erb पेज
  • show.html.erb का दौरा किया <%= @post.value %> का उपयोग कर database से मूल्य लाने।
  • काउंटर शुरू हुआ और काउंटर का प्रत्येक पुनरावृत्ति 10 seconds के लिए है।
  • प्रत्येक 10 seconds के बाद मैं @post.valueutility कक्षा का उपयोग करना चाहता था।
  • डेटाबेस में @post.value अद्यतन करें।
  • स्वचालित रूप से show.html.erb ताज़ा और <%= @post.value %> अद्यतन मूल्य
  • प्रक्रिया से ऊपर अन्य पृष्ठों पर उपयोगकर्ता चाल जब तक पाश में चलाया जाएगा दिखाएगा।

मैं कोड में समस्या को आसान बनाने के लिए है, तो यह इस चाहते हैं:

देखें पृष्ठ

<%= @post.value %> 
<%= @post.name %> 

नियंत्रक विधि

def show 
@post = Post.find(params[:id]) 
end 

def update 
.... #It's empty right now 
end 

def fetching_value_from_PostUpdate(current_value) 
.. # Now I need to update the value in database 
end 

उपयोगिता वर्ग

मैं वें पर post.value अद्यतन करना चाहते हैं इस वर्ग में लिखित विधि का ई आधार। छद्म कोड:

class PostUpdate 
@@instance_variable 

def initialize(post_value) 
    @@instance_variable = Marshal.load(Marshal.dump(post_value)) 
end 

    #Method required to calculate the value 
def update_data_in_database 
... 
return data 
end 

प्रश्न

  • कहाँ मैं काउंटर डाल करने के लिए है? ग्राहक पक्ष या सर्वर पक्ष? मैं रेल में background jobs का उपयोग नहीं करना चाहता हूं।
  • show विधि में मुझे किन परिवर्तनों की आवश्यकता है ताकि प्रत्येक अंतराल पृष्ठ स्वचालित रूप से रीफ्रेश हो जाए और अपडेट किए गए मान को @post.value में पास कर दें?

आपकी मदद के लिए धन्यवाद!

+0

मुझे लगता है कि आपको बेहतर उत्तर मिल सकता है अगर आप बताएं कि आप वास्तव में क्या करने के लिए कोशिश कर रहे हैं रहा है - आप एक दृश्य काउंटर जोड़ने की कोशिश कर रहे हैं? या लाइव अपडेट के कुछ रूप प्रदान करते हैं? उपयोगकर्ताओं के दृष्टिकोण से इसका वर्णन करने का प्रयास करें। – max

+0

@ एमिटपाल: प्रश्न 2 और 3 उलझन में हैं, क्या आप इनमें से किसी एक या दोनों के बारे में सोच रहे हैं? यदि आप प्रत्येक 10 सेकंड में समय-समय पर पेज रीफ्रेश करते हैं तो AJAX का उपयोग करके एक विशेष मान को अपडेट करना समझ में नहीं आता है। साथ ही, आप '<% = @ post.value%> '' मान को देखने पर अपडेट नहीं कर सकते हैं, आप HTML खंड को अपडेट कर सकते हैं जहां वह मान पृष्ठ पर प्रदान किया जाता है। क्या आप यही कहने की कोशिश कर रहे हैं? क्या मैं कुछ भूल रहा हूँ? – Surya

+0

@ सूर्या हां, मैं उनमें से एक या किसी भी दृष्टिकोण को बेहतर सोच रहा हूं। हां आप 'HTML' प्रतिपादन के बारे में सही हैं। मैंने इस बारे में नहीं सोचा है कि इस मामले में 'अजाक्स' काम नहीं करेगा। आखिरकार मैं एक रास्ता तलाश रहा हूं, जिसे मैं 'post.value' समय-समय पर (conunter के अनुसार) अद्यतन कर सकता हूं, जब तक उपयोगकर्ता पृष्ठ पर नहीं जाता है तब तक' उपयोगिता 'वर्ग विधि का उपयोग कर। मान लें कि @ पहले विज़िट करें: काउंटर स्टार्ट और '@ पोस्ट.वल्यू' = 3 डेटाबेस में मान अपडेट करें और स्वचालित रूप से पृष्ठ को रीफ्रेश करने के बाद HTML व्यू में नया मान प्रस्तुत करें 10 सेकंड के लिए प्रतीक्षा करें और उपर्युक्त प्रोसेस –

उत्तर

1

मैं कहूंगा कि यह सबसे आसान तरीका है ActionController::Live का उपयोग करेगा। इसका उपयोग करके आप अपने <%= @post.value %> को पकड़ने और अपडेट करने के लिए वहां जेएस स्क्रिप्ट के दौरान अपने क्लाइंट को एसएसई (सर्वर प्रेषित इवेंट) भेज सकेंगे। इसका उपयोग करने पर pretty nice manual है।

अभी भी मेरे दृष्टिकोण से उन चीजों को लागू करने का सबसे उचित तरीका है जो आप करना चाहते हैं Faye जैसे कुछ का उपयोग करेंगे। यह एक प्रकाशित/सब्सक्राइब मैसेजिंग सिस्टम है जो आपको अपने क्लाइंट को जैसे ही दिखाई देता है, नए डेटा के साथ अपडेट करने की अनुमति देगा, उदाहरण के लिए, आप अपने मॉडल में after_save सेट कर सकते हैं और सभी सब्स्क्राइब किए गए क्लाइंट्स को अपडेट प्रकाशित कर सकते हैं। और निश्चित रूप से इसके उपयोग को लपेटने के लिए faye नामक एक मणि भी कहा जाता है।

2

मैं सर्वर पर मतदान के विरोध में Firebase के साथ जाऊंगा।

हालांकि, यदि आप समय-समय पर सर्वर को मतदान करना चाहते हैं, तो मेरे पास केवल एक जावास्क्रिप्ट विधि होगी जो हर 10 सेकंड को निष्पादित करेगी, या जो भी अंतराल आप चाहें, और जो भी डेटा आप असीमित रूप से और बाद में प्राप्त करें डीओएम अपडेट करता है।

इसके अलावा, ruby wrapper for firebase api, मामले में है कि ब्याज की हो सकती है

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