मैंने वेब को बहुत दूर और व्यापक खोजा है (ActionCable
के लिए कई कोड उदाहरणों को पढ़ने सहित) जो कि एक बहुत ही बुनियादी प्रश्न का उत्तर है । हां, मैंने अपनी समस्या हल नहीं की है।रेल पर रूबी 5 एक्शन केबल: वर्तमान मॉडल इंस्टेंस (यूआरएल-आधारित सब्सक्रिप्शन) के लिए स्ट्रीम
मान लीजिए, मेरे पास एक मॉडल Search
है और मैंने URL /searches/1
पर नेविगेट किया है।
App.instance = App.cable.subscriptions.create 'SearchChannel'
और एक SearchChannel
वर्ग कि इस तरह दिखता है:
मैं भी javascripts/channels/
जो साथ शुरू होता है के तहत search.coffee
फ़ाइल होता
class SearchChannel < ApplicationCable::Channel
def subscribed
search = Search.find(params[:id])
stream_for search
end
def unsubscribed
end
end
स्वाभाविक रूप से, कोड ऊपर एक त्रुटि पैदा करता है क्योंकि params[id]
nil
है।
यहाँ मेरी प्रश्न हैं:
- मैं कैसे सही
Search
उदाहरण URL के आधार पर करने के लिए सदस्यता करते हैं? - मैं
SearchChannel
पर सब्सक्राइब करने का प्रयास करने से कैसे बचूं यदि मैं किसी अन्य URL पर हूं जिसके लिए सदस्यता की आवश्यकता नहीं है, उदा।/searches/1/results
?
मदद के लिए धन्यवाद!
आपके उत्तर के लिए धन्यवाद, लेकिन यह मेरी मदद नहीं करता है। मैंने दस्तावेज में इस विकल्प के बारे में पहले से ही पढ़ा था, लेकिन जो मैं उलझन में हूं, वह विशेष रूप से 'आईडी' को 'सर्चचैन' में भेजना है। रेल 'जावास्क्रिप्ट/चैनल /' के तहत 'search.coffee' डालता है, जिसका अर्थ है कि मुझे उस आईडी से कहीं उस आईडी को पास करने की आवश्यकता है। यही वह जगह है जहां मेरी कठिनाई झूठ बोलती है। – Vadim
मुझे पूरा यकीन नहीं है कि आप 'SearchChannel' सदस्यता के साथ क्या हासिल करने का प्रयास कर रहे थे। लेकिन अगर आपको रूबी पक्ष से जावास्क्रिप्ट पक्ष में '@ search.id' को कैप्चर करने की आवश्यकता है, तो आपके पास कई विकल्प हैं। विकल्प 1: जब आप '/ search/1' url पर हों, तो आप जावास्क्रिप्ट में यूआरएल पार्स कर सकते हैं और 'id' को url से' App.cable.subscriptions.create' तक पास कर सकते हैं। विकल्प 2: 'शो' टेम्पलेट के प्रमुख में, 'id' को जावास्क्रिप्ट में संग्रहीत करें, पूर्व में: <% = javascript_tag "var search_id = # {params [: id]}"%> और' search_id' को ' App.cable।subscriptions.create'। उम्मीद है की वो मदद करदे। – Dharam