非常に基本的な質問に対する答えであると思われるものについて、私は広範囲(広範囲のコード例をActionCable
で読むことを含む) 。ああ、私は私の問題を解決していません。Ruby on Rails 5アクションケーブル:現在のモデルインスタンスのストリーム(URLベースのサブスクリプション)
私はモデルSearch
を持っていて、URL /searches/1
にナビゲートしたとします。
私もで始まるjavascripts/channels/
下search.coffee
ファイルなければなりません:
App.instance = App.cable.subscriptions.create 'SearchChannel'
とこのようになりますSearchChannel
クラス:
class SearchChannel < ApplicationCable::Channel
def subscribed
search = Search.find(params[:id])
stream_for search
end
def unsubscribed
end
end
当然のことながら、上記のコードがあるため、エラーを生成しparams[id]
nil
です。
ここに私の質問は以下のとおりです。
- は、どのように私はURLに基づいて正しい
Search
インスタンスに加入していますか? - サブスクリプションを必要としない別のURLを使用している場合は、
SearchChannel
に登録しないでください。/searches/1/results
?
ありがとうございました!
ご回答ありがとうございますが、これは私を助けません。私はすでにドキュメントでこのオプションについて読んでいましたが、私が混乱しているのは、その 'id'を' SearchChannel'に送る方法です。 Railsは 'javascripts/channels /'の下に 'search.coffee'を置きます。つまり、' id'をそのファイルのどこかから渡す必要があります。それが私の難しさにあります。 – Vadim
'SearchChannel'サブスクリプションで何を達成しようとしているのかよくわかりません。しかし、 '@ search.id'をRuby側からjavascript側に取得する必要がある場合は、複数のオプションがあります。オプション1:あなたが '/ searches/1'のurlにいる間、javascriptのurlを解析し、urlの' id'を 'App.cable.subscriptions.create'に渡すことができます。オプション2: 'show'テンプレートの先頭にjavascriptで' id'を格納します。例:<%= javascript_tag "var search_id =#{params [:id]}"%>そして 'search_id'を' App.cable。subscriptions.create'。希望が役立ちます。 – Dharam