簡體   English   中英

Rails ajax聊天應用程序缺少此請求格式和變體的模板

[英]Rails ajax chat app missing a template for this request format and variant

我正在使用的Rails應用程序具有聊天功能。 我正在使用ajax發送消息。 我決定將回形針添加到我的消息表中,以便您可以在聊天中發送圖像,但是當我按Enter鍵時,圖像會出現一秒鍾,將其存儲到數據庫中,然后頁面拋出錯誤

    MessagesController#create is missing a template for this request format and variant. request.formats: ["text/html"] request.variant: []

當我刷新頁面時,圖像在聊天中顯示的很好,所以我知道提交的表單。

chatrooms.cofee

    $(document).on "turbolinks:load", ->
     $("#new_message").on "keypress", (e) ->
       if e && e.keyCode == 13
         e.preventDefault()
         $(this).submit()

messages_controller.rb

   class MessagesController < ApplicationController
     before_action :authenticate_user!
     before_action :set_chatroom


    def create
      message = @chatroom.messages.new(message_params)
      message.user = current_user
      message.save
      MessageRelayJob.perform_later(message)
   end

   private

    def set_chatroom
     @chatroom = Chatroom.find(params[:chatroom_id])
    end

    def message_params
      params.require(:message).permit(:body, :image)
   end
 end

show.html.erb

    <%= render 'side_nav' %>

    <div class = "container-fluid">
     <div class = "col-sm-10 col-sm-offset-2">
    <p>
      <strong>Name:</strong>
      <%= @chatroom.name %>
    </p>

     <div data-behavior="messages" data-chatroom-id='<%= @chatroom.id %>'>
     <% @messages.each do |message| %>
     <%= render message  %>
     <% end %>
    </div>

      <%= form_for [@chatroom, Message.new], remote: true , multipart:  true, authenticity_token: true do |f| %>
      <%= f.text_field :body , rows: 1 , class: "form-control", autofocus:true%>
      <%= f.file_field :image %>
    <% end %>

  </div>

很抱歉,格式不好,即時通訊是堆棧溢出的新功能,但是您可以根據需要添加任意數量的聊天室,即時通訊使用ajax發送消息。 我不確定我是否需要包括一些額外的代碼來處理圖像。 發送基本字符串(僅回形針圖像)時沒有錯誤。

默認情況下,您的create動作將呈現 由於您沒有模板並且不希望其呈現,因此需要覆蓋它。

代替:

def create
  message = @chatroom.messages.new(message_params)
  message.user = current_user
  message.save
  MessageRelayJob.perform_later(message)
end

做類似的事情:

def create
  message = @chatroom.messages.new(message_params)
  message.user = current_user
  if message.save
    MessageRelayJob.perform_later(message)
    render json: {success: "message sent", error: false}, status: 200
  else
    render json: {success: false, error: true}, status: 422
  end
end

最終,您的瀏覽器客戶端將需要有關是否保存/發送消息的一些反饋。

您收到的錯誤是說它缺少html格式的創建模板。 所以...你有一個create.html.erb嗎? 因為那是Rails告訴您的期望...

如果渲染不是您想要的...,那么您需要更改調用create動作的方式。 例如,如果您希望它要求create.js.erb模板的JS版本...那么您需要確保該format: js進入鏈接/表單請求。

或者,您可以在create操作結束時重定向到顯示頁面:)

在您的MessagesController中,您需要以這種方式添加重定向。 “在最后一行redirect_to chatroom_path(@chatroom)中,您正確地重定向”

def create
 message = @chatroom.messages.new(message_params)
 message.user = current_user
 message.save
 MessageRelayJob.perform_later(message)
 redirect_to chatroom_path(@chatroom)
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM