2017-01-12 7 views
5

तो मेरे पास यह उपयोग केस है जहां मैं एक नियंत्रक (ApplicationController.renderer के साथ) में एक संदेश प्रस्तुत करता हूं जिसे बाद में कुछ उपयोगकर्ताओं को प्रसारित किया जाता है। प्रसारण भी एक ही नियंत्रक के अंदर किया जाता है। इन क्रियाओं को तब ट्रिगर किया जाता है जब कुछ ऑब्जेक्ट का अद्यतन किया जाता है।रेल 5, एक्शन केबल और current_user

समस्या यह है कि मुझे उस प्रस्तुत दृश्य के अंदर current_user ऑब्जेक्ट तक पहुंचने की आवश्यकता है, और निश्चित रूप से, मैं इसे वर्तमान उपयोगकर्ता के साथ स्थानीय चर के रूप में प्रस्तुत नहीं कर सकता क्योंकि तब संदेश उस उपयोगकर्ता के साथ भेजा जाएगा जो प्रसारित करता है संदेश और अंतिम उपयोगकर्ता नहीं जो उस दृश्य को देखेगा।

तो, कुछ ब्लॉग पोस्ट और रेल डॉक्स पढ़ने के बाद मैंने एक्शन केबल द्वारा समर्थित कुकीज़ के साथ प्रमाणीकरण सेट किया।

मेरा प्रश्न है: मैं प्रस्तुत उपयोगकर्ता के अंदर, अंत उपयोगकर्ता के ऑब्जेक्ट (current_user) के अंदर कैसे पहुंच सकता हूं?

वर्तमान में, मेरा कनेक्शन वर्ग इस तरह दिखता है। हालांकि, मैं इस चर (log_user) के साथ उस दृश्य को कैसे प्रस्तुत कर सकता हूं?

module ApplicationCable 
    class Connection < ActionCable::Connection::Base 
    identified_by :logged_user 

    def connect 
    self.logged_user = User.find_by(id: cookies.signed[:user_id]) 
    end 
end 
end 

मेरे नियंत्रक इस तरह दिखता है:

(...) 

def update 
    if @poll.update(poll_params) 
    broadcast_message(render_message(@poll), @poll.id, @poll.room.id) 
    (...) 
    end 
end 

def broadcast_message(poll = {}, poll_id, room_id) 
    ActionCable.server.broadcast 'room_channel', body: poll, id: poll_id, room_id: room_id 
end 

def render_message(poll). 
    if poll.show_at.to_time <= Time.now 
    ApplicationController.renderer.render(
     partial: 'rooms/individual_student_view_poll', 
     locals: { 
     poll: poll, 
     room: @room 
     }) 
    end 
end 

(....) 

तो मूल रूप से, मेरे अंतिम लक्ष्य के बाद संदेश यह करने के लिए प्रसारित logged_user वस्तु का उपयोग करने की है।

धन्यवाद

+0

मैं ठीक उसी समस्या है, तो आप इसे इस बीच में यह पता लगाने की थी ? – cseelus

उत्तर

0

कुछ इस तरह:

ApplicationController.renderer.render(
    partial: 'rooms/individual_student_view_poll', 
    locals: { 
    poll: poll, 
    room: @room 
    }, 
    assigns: { 
    logged_user: logged_user 
    } 
) 

इस तरह अपने टेम्पलेट में उपलब्ध हो जाएगा:

<% if defined? @logged_user %> 
... 
<% end %> 
+0

ठीक है लेकिन मैं नियंत्रक से var log_user का उपयोग कैसे कर सकता हूं? – cbk200

+0

असाइन का उपयोग करके, {log_user: ...} @logged_user बन गया। आपके चैनल को एप्लिकेशनकेबल :: चैनल प्राप्त होता है ताकि आप अपने चैनल से self.logged_user तक पहुंच सकें और "असाइन" –

+0

के माध्यम से अपने दृश्य में संचारित कर सकें, लेकिन जैसा कि मैंने पहले कहा था कि मैं नियंत्रक से चैनल से नहीं हूं। क्या मुझे इसे चैनल पर करना चाहिए? यदि हां, और यह मानते हुए कि render_message विधि चैनल में रहता है, तो मैं नियंत्रक के भीतर इसका उपयोग कैसे कर सकता हूं? – cbk200

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