[英]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.