2016-08-17 32 views

Odpowiedz

7

stream_for to po prostu metoda owijania stream_from z łatwością.

Gdy potrzebujesz strumienia powiązanego z konkretnym modelem, automatycznie wygenerujesz nadawanie z modelu i kanału.

Załóżmy masz chat_room wystąpienie ChatRoom klasie

stream_from "chat_rooms:#{chat_room.to_gid_param}" 

lub

stream_for chat_room # equivalent with stream_from "chat_rooms:Z2lkOi8vVGVzdEFwcC9Qb3N0LzE" 

dwie linie kodu robi to samo.

https://github.com/rails/rails/blob/master/actioncable/lib/action_cable/channel/streams.rb

+0

Jaki jest sens części 'to_gid_param'? Nie możesz po prostu powiedzieć 'chat_room _ # {params [: chat_room_id]}? –

+0

Czy służy tylko do kodowania dowolnego ciągu znaków w poprawnym łańcuchu, który nie jest pusty? Czy jest za tym jakiś inny pomysł? –

+0

'stream_for jest używane, gdy istnieje określony rekord (lub rekord i powiązanie), o których chcemy uzyskać aktualizacje. Pod maską Action Cable generuje unikalny ciąg dla tego rekordu lub tego rekordu i jego powiązania, a następnie wywołuje metodę stream_for [sic - prawdopodobnie powinna być "stream_from"]. "Źródło: https://www.sitepoint.com/action-cable-and-websockets-a-in-depth-tutorial/ –

0

kevinhyunilkim's answer jest prawie ok, ale przedrostek zależy CHANNEL_NAME, nie klasa modelu.

class CommentsChannel < ApplicationCable::Channel 
    def subscribed 
    stream_for article 
    # is equivalent to 
    stream_from "#{self.channel_name}:{article.to_gid_param}" 
    # in this class this means 
    stream_from "comments:{article.to_gid_param}" 
    end 

    private 

    # any activerecord instance has 'to_gid_param' 
    def article 
    Article.find_by(id: params[:article_id]) 
    end 
end 

można również przekazać prosty ciąg stream_for który po prostu dodaje nazwę kanału.