Active Record Callback中的Self为关联返回nil?

时间:2016-10-31 20:19:07

标签: ruby-on-rails ruby rails-activerecord

我尝试创建一个在创建关联记录时发送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_save运行时,我的部分是抛出 未定义的方法`用户名'为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

连接本身并非零。但是,当部分引用相关的用户记录时,它会遇到麻烦。

为什么会发生这种情况,我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:0)

这可能是因为您销毁了连接对象本身,所以当活动记录尝试查询关联用户时,实际上找不到它。为什么不尝试将用户传递给部分。

类似的东西:

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