ActionCableを使用してWebソケットを介してデータをブロードキャストする際に問題があります。このエラーは、createメソッドからのエラーを示唆しているようです。NoMethodError(未定義メソッドfetchでnil:NilClass)
エラーメッセージ
Rendered weight/_weight.html.erb (1.1ms)
[ActionCable] Broadcasting to weight: "<div class=\"row\">\n <div class=\"col-md-8 well\">\n <p>12.0 kg</p>\n <small>less than a minute</small>\n </div>\n</div>"
Completed 500 Internal Server Error in 25ms (Views: 7.4ms | ActiveRecord: 10.6ms)
NoMethodError (undefined method `fetch' for nil:NilClass):
app/controllers/weight_controller.rb:7:in `create'
Rendering /usr/local/rvm/gems/ruby-2.3.4/gems/actionpack-5.0.4/lib/action_dispatch/middleware/templates/rescues/diagnostics.text.erb
Rendering /usr/local/rvm/gems/ruby-2.3.4/gems/actionpack-5.0.4/lib/action_dispatch/middleware/templates/rescues/_source.text.erb
Rendered /usr/local/rvm/gems/ruby-2.3.4/gems/actionpack-5.0.4/lib/action_dispatch/middleware/templates/rescues/_source.text.erb (0.8ms)
Rendering /usr/local/rvm/gems/ruby-2.3.4/gems/actionpack-5.0.4/lib/action_dispatch/middleware/templates/rescues/_trace.text.erb
Rendered /usr/local/rvm/gems/ruby-2.3.4/gems/actionpack-5.0.4/lib/action_dispatch/middleware/templates/rescues/_trace.text.erb (0.9ms)
Rendering /usr/local/rvm/gems/ruby-2.3.4/gems/actionpack-5.0.4/lib/action_dispatch/middleware/templates/rescues/_request_and_response.text.erb
Rendered /usr/local/rvm/gems/ruby-2.3.4/gems/actionpack-5.0.4/lib/action_dispatch/middleware/templates/rescues/_request_and_response.text.erb (1.1ms)
Rendered /usr/local/rvm/gems/ruby-2.3.4/gems/actionpack-5.0.4/lib/action_dispatch/middleware/templates/rescues/diagnostics.text.erb (25.0ms)
はゼロとして返されるものcontroller.rbから
def create
@weight = Weight.new(weight_params)
@weight.user_id = current_user.id
if @weight.save
ActionCable.server.broadcast "weight", render(partial: 'weight/weight', object: @weight)
else
flash[:danger] = "New Weight was not added!"
redirect_to current_user
end
end
private
def weight_params
params.require(:weights).permit(:weight)
end
私はちょうどカントの仕事をする方法を作成します。重要な情報をブロードキャストしている情報が正確であるという事実は、それがデータベースに正しく保存されていることを示唆しています。それ以外のものは 'フェッチ'メソッドを実行しているとは思えません。
ウェブソケットが正しく設定されていることを確認してください。下記参照。
設定/ application.rb:
config.action_cable.mount_path = '/cable'
のconfig/routes.rbを:
mount ActionCable.server => '/cable'
weight_channel.rb:
def subscribed
stream_from "weight"
end
weight.coffee:欠落が原因config/cable.yml
ファイルへ
received: (data) ->
$("#messages").prepend(data)
行は 'weight_controller.rb'ファイルの7行目ですか?あなたが 'fetch'を呼び出すのはどこですか? ( 'save'によって呼び出されるバリデーションにおいて、モデル内のビューで?)? – Myst
7行目は上記の抽出の5行目です。私はどこでもフェッチを使用していません。 – will
デバッグのために、 'render'を' broadcast'から分離し、2つの異なる行に配置することを検討してください。つまり、:tmp = render(部分: 'weight/weight'、オブジェクト:@weight) '新しい行' ActionCable.server.broadcast "weight"、tmp' ...どのメソッド呼び出しが新しいエラー。 – Myst