我在軌道應用程序即時通訊工作中有聊天功能。我使用Ajax發送消息。我決定增加回形針到我的信息表,所以你可以在聊天中發送圖像,但是當我按下輸入圖像出現了一秒鐘,它存儲到數據庫,然後在頁面拋出一個錯誤Rails ajax聊天應用程序缺少此請求格式和變體的模板
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發送消息。林不知道,如果我需要包括一些額外的代碼來處理圖像。發送基本字符串時沒有錯誤,只是回形針圖像。
so ...你有一個'create.html.erb'嗎?因爲這就是Rails告訴你的,它期望的...... 另外 - 你可以在創建動作結束時重定向到顯示頁面:) –
@Tarn East不,我在show.html.erb中呈現了表單,但我有一個只有這一行$(「#new_message」)[0] .reset()的create.js.erb。你是說做一個redirect_to節目嗎?我不想被重定向出聊天 – jalen201
你得到的錯誤是說它缺少格式爲html的create-template。如果渲染不是你想要的......那麼你需要改變你如何調用創建動作。例如,如果你想要它要求的JS版本......那麼你需要確保'format:js'進入鏈接/表單請求。 :) –