Self in Active Record Callback возвращающий ноль для ассоциаций?

Я пытаюсь создать обратный вызов, который отправляет мою широковещательную передачу ActionCable при создании связанной записи.

 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-destroy работает, как и ожидалось. Однако, когда after_save запускает my partial бросает неопределенный метод ‘username’ для nil:NilClass, когда он пытается отобразить мой partial.

%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

Само соединение не равно нулю. Но когда частичные ссылки на связанную запись пользователя он попадает в беду.

Почему это происходит, и что я могу сделать, чтобы исправить это?

1 ответ

  1. Это может быть потому, что вы уничтожили сам объект подключения, поэтому, когда active record пытается запросить связанного пользователя, его фактически не нашли. Почему бы вам не попробовать передать пользователя, а также в частичной.

    Что-то вроде:

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