Opisy wydają się sugerować, że stream_for
jest używany tylko podczas przekazywania rekordu, ale ogólnie dokumentacja jest raczej niejasna. Czy ktoś może wyjaśnić różnice między stream_from
i stream_for
i dlaczego chcesz użyć jednego na drugim?Jaka jest różnica między `stream_from` a` stream_for` w ActionCable?
5
A
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
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.
Jaki jest sens części 'to_gid_param'? Nie możesz po prostu powiedzieć 'chat_room _ # {params [: chat_room_id]}? –
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ł? –
'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/ –