【发布时间】:2017-06-15 09:46:21
【问题描述】:
我正在尝试发送消息,然后让它们出现在聊天框中。每次我发送消息时,都会导致以下错误。如果我刷新页面并打开聊天框,它会包含我上次输入的消息(意味着保存!正在工作)。是否有可以解决此问题的“路径”变量的特殊用法?
错误:缺少模板消息/创建,应用程序/创建 {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, : builder, :raw, :ruby, :coffee, :haml, :rabl, :jbuilder]}
消息控制器(相关功能)
def create
@conversation = Conversation.find(params[:conversation_id])
@message = @conversation.messages.build(message_params)
@message.user_id = current_user.id
@message.save!
@path = conversation_path(@conversation)
end
对话控制器(相关功能)
def create
if Conversation.between(params[:sender_id],params[:recipient_id]).present?
@conversation = Conversation.between(params[:sender_id],params[:recipient_id]).first
else
@conversation = Conversation.create!(conversation_params)
end
render json: { conversation_id: @conversation.id }
end
def show
@conversation = Conversation.find(params[:id])
@reciever = interlocutor(@conversation)
@messages = @conversation.messages
@message = Message.new
end
_message.html.erb
<li class="<%= self_or_other(message) %>">
<div class="avatar">
<img src="http://placehold.it/50x50" />
</div>
<div class="chatboxmessagecontent">
<p><%= message.body %></p>
<time datetime="<%= message.created_at %>" title="<%= message.created_at.strftime("%d %b %Y at %I:%M%p") %>">
<%= message_interlocutor(message).uname %> • <%= message.created_at.strftime("%H:%M %p") %>
</time>
</div>
</li>
create.js.erb(与 _message 一起在消息文件夹中)
<% publish_to @path do %>
var id = "<%= @conversation.id %>";
var chatbox = $("#chatbox_" + id + " .chatboxcontent");
var sender_id = "<%= @message.user.id %>";
var reciever_id = $('meta[name=user-id]').attr("content");
chatbox.append("<%= j render( partial: @message ) %>");
chatbox.scrollTop(chatbox[0].scrollHeight);
if(sender_id != reciever_id){
chatBox.chatWith(id);
chatbox.children().last().removeClass("self").addClass("other");
chatbox.scrollTop(chatbox[0].scrollHeight);
chatBox.notify();
}
<% end %>
对话/show.html.erb
<div class="chatboxhead">
<div class="chatboxtitle">
<i class="fa fa-comments"></i>
<h1><%= @reciever.uname %> </h1>
</div>
<div class="chatboxoptions">
<%= link_to "<i class='fa fa-minus'></i> ".html_safe, "#", class: "toggleChatBox", "data-cid" => @conversation.id %>
<%= link_to "<i class='fa fa-times'></i> ".html_safe, "#", class: "closeChat", "data-cid" => @conversation.id %>
</div>
<br clear="all"/>
</div>
<div class="chatboxcontent">
<% if @messages.any? %>
<%= render @messages %>
<% end %>
</div>
<div class="chatboxinput">
<%= form_for([@conversation, @message], :remote => true, :html => {id: "conversation_form_#{@conversation.id}"}) do |f| %>
<%= f.text_area :body, class: "chatboxtextarea", "data-cid" => @conversation.id %>
<% end %>
</div>
<%= subscribe_to conversation_path(@conversation) %>
应用程序.js
// These plugins must be loaded first
//= require plugins/jquery
//= require jquery.iframe-transport
//= require jquery.remotipart
//= require plugins/picker
//= require jquery_ujs
// Extra
//= require_directory ./plugins
//= require_directory ./components
//= require common
//= require user_info_boxes
//= require moment
//= require fullcalendar
//= require underscore
//= require introjs
//Required For Chats
//= require bootstrap-sprockets
//= require bootstrap.min
//= require private_pub
//= require chat
//= require users
提前谢谢你!
【问题讨论】:
-
您的消息表单在哪里?它有
remote: true吗? -
@SergioTulentsev 已添加。它位于 conversations/show.html 中。谢谢!
标签: javascript ruby-on-rails ruby