0

iv been tryna implement turbo streams with friend request system and i have the following code in place:

 # models/friend_request.rb
  after_create_commit do 
    broadcast_friend_request_form_replace
  end
  
  after_destroy_commit do 
    broadcast_friend_request_form_replace
  end
 
  private
 
  def broadcast_friend_request_form_replace
    # Sends a replace broadcast to the Sender's stream, targeting the Receiver's turbo frame to perform the form changes.
    broadcast_replace_later_to [self.sender.id, self.receiver.id], target: dom_id(self.receiver), partial: "users/friend_request_form", 
      locals: { logged_in_user: self.sender, user: self.receiver, friend_request: self }
 
    # Sends a replace broadcast to the Receiver's stream, targeting the Sender's turbo frame to perform the form changes.
    broadcast_replace_later_to [self.receiver.id, self.sender.id], target: dom_id(self.sender), partial: "users/friend_request_form", 
      locals: { logged_in_user: self.receiver, user: self.sender, friend_request: self }
  end

The feature works with after_create_commit callback, however im having this error when trying to do it for the after_destroy_commit callback: Discarded Turbo::Streams::ActionBroadcastJob due to a ActiveJob::DeserializationError.

To my understanding, the error maybe related to the fact that, since im using broadcast_replace_later_to instead of broadcast_replace_to, it enqueues a background job to be done at a later time and when that happens the object (self) no longer exists and therefore I'm receiving the DeserializationError error.

I have tried using broadcast_replace_to instead but that makes it synchronous and what happens is that only the first callback executed after a page refresh/reload will work, not both.

Adrian-y
  • 1
  • 2

0 Answers0