Instead of updating the is_read attribute try this
#conversations_controller.rb
def show
@receipts = mailbox.receipts_for(conversation).not_trash
@receipts.mark_as_read
end
private
def mailbox
@mailbox ||= current_user.mailbox
end
def conversation
@conversation ||= mailbox.conversations.find(params[:id])
end
You can also mark a entire conversation as read with
conversation.mark_as_read(current_user)