2017-09-24 25 views
0

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) 
+0

行は 'weight_controller.rb'ファイルの7行目ですか?あなたが 'fetch'を呼び出すのはどこですか? ( 'save'によって呼び出されるバリデーションにおいて、モデル内のビューで?)? – Myst

+0

7行目は上記の抽出の5行目です。私はどこでもフェッチを使用していません。 – will

+0

デバッグのために、 'render'を' broadcast'から分離し、2つの異なる行に配置することを検討してください。つまり、:tmp = render(部分: 'weight/weight'、オブジェクト:@weight) '新しい行' ActionCable.server.broadcast "weight"、tmp' ...どのメソッド呼び出しが新しいエラー。 – Myst

答えて

0

エラーが発生しました。

解決策は、アプリケーションに必要な設定でconfig/cable.ymlを使用することでした。すなわち:

# Action Cable uses Redis by default to administer connections, channels, and sending/receiving messages over the WebSocket. 
production: 
    adapter: redis 
    url: redis://localhost:6379/1 

development: 
    adapter: redis 
    url: redis://localhost:6379/1 

staging: 
    adapter: redis 
    url: redis://localhost:6379/1 

test: 
    adapter: async 

質問のコメントに解決方法が表示されます。

関連する問題