2016-10-31 3 views
0

関連するレコードが作成されたときに私のActionCableブロードキャストを送信するコールバックを作成しようとしています。アソシエーションのためにnilを返すアクティブレコードコールバック内の自己?

after_save :broadcast_connection_open_to_room 
before_destroy :broadcast_connection_close_to_room 

private 
    def broadcast_connection_close_to_room 
    ActionCable.server.broadcast(
     'room_' + self.room_id.to_s, 
     state: "exit", 
     connection_id: self.id, 
    ) 
    end 

    def broadcast_connection_open_to_room 
    ActionCable.server.broadcast(
     'room_' + self.room_id.to_s, 
     state: "enter", 
     connection_id: self.id, 
     html: ApplicationController.render(partial: "connections/connection", locals: {connection: self}) 
    ) 
    end 

私の破壊後は期待通りに動作しています。しかし、after_saveが実行されるときに私の部分が投げている未定義のメソッド `username 'はnilになります:NilClass私の部分をレンダリングしようとすると。

%li.list-group-item{id: "connection_" + connection.id.to_s} 
%h4.list-group-item-heading.text-left= connection.user.username 
%div.text-left 
    .pull-right.vcenter 
    %span Mute Player 
    %span.glyphicon.glyphicon-volume-off 

接続自体はゼロではありません。しかし、部分的に関連するユーザーレコードを参照すると、問題が発生します。

なぜこれが起こっているのですか?これを解決するにはどうすればよいですか?

答えて

0

アクティブなレコードが関連付けられたユーザーを照会しようとしたときに、接続オブジェクト自体が破壊された可能性があります。そのユーザーは実際には見つかりません。どうしてあなたも部分的なものにユーザーを渡そうとしないでください。以下のような

何か:

...locals: {connection: self, user: self.user} 
+0

私はそれにも試してみましたが、それは同じ結果を生成です。 –

+0

'%h4.list-group-item-heading.text-left = User.find(connection.user_id).username'についてはどうですか? – Jeff

関連する問題