2016-08-17 52 views

cevap

7

stream_for, stream_from'un kolayca bir sarmalayıcı yöntemidir.

Belirli bir modelle ilişkili bir akışa ihtiyaç duyduğunuzda, stream_for otomatik olarak sizin modelinizden ve kanalınızdan yayın üretir.

Diyelim ki ChatRoom sınıfın bir chat_room örneği olduğunu varsayalım

kod

stream_from "chat_rooms:#{chat_room.to_gid_param}" 

veya

stream_for chat_room # equivalent with stream_from "chat_rooms:Z2lkOi8vVGVzdEFwcC9Qb3N0LzE" 

iki satır aynı şeyi yapar.

+0

'to_gid_param' parçasının noktası nedir? Sadece chat_room _ # {{params [: chat_room_id]} 'deme? –

+0

Sadece rastgele bir dizeyi geçerli bir boşluk olmayan dize olarak kodlamak için mi? Yoksa arkasında başka bir fikir var mı? –

+0

'stream_for, güncellemeler istediğimiz belirli bir kayıt (veya kayıt ve ilişkilendirme) olduğunda kullanılır. Davlumbazın altında Action Cable, bu kayıt için ya da bu kayıt ve ilişkilendirmesi için benzersiz bir dizgi oluşturuyor ve daha sonra stream_for [sic - muhtemelen 'stream_from' olmalıdır] yöntemini çağırıyor. Kaynak: https://www.sitepoint.com/action-cable-ve-websockets-derinlemesine-öğretici/ –

0

kevinhyunilkim's answer

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

neredeyse Tamam, ama önek CHANNEL_NAME bağlıdır değil modeli sınıfı.

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 

da basitçe kanal adını ekler stream_for basit dize iletebilirsiniz.