【发布时间】:2017-07-21 13:15:13
【问题描述】:
我正在开发的 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.html.erb吗?因为这是 Rails 告诉你它所期待的......或者 - 你可以在创建操作结束时重定向到显示页面:) -
@Tarn East 没有,我在 show.html.erb 中渲染了表单,但我确实有一个 create.js.erb,只有这一行 $("#new_message")[0]。重置()。你是说做一个redirect_to show 吗?我不想被重定向到聊天之外
-
您得到的错误是说它缺少格式为 html 的创建模板。如果渲染不是您想要的...那么您需要更改 调用 create 操作的方式。例如,如果您希望它要求 JS 版本...那么您需要确保
format: js进入链接/表单请求。 :) -
实际上@Tarn East 你绝对正确我添加了 redirect_to "show" ,这解决了问题。不敢相信我没有感谢这一点。谢谢。
-
我会把它变成一个答案:)
标签: ruby-on-rails ruby ajax coffeescript