【问题标题】:How do you fix the missing templates error in rails despite the save function working?尽管保存功能有效,您如何修复 rails 中缺少模板的错误?
【发布时间】: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 %>
    &nbsp;&nbsp;
    <%= 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


【解决方案1】:

在Messages Controller中,你试过了吗:

def create
  @conversation = Conversation.find(params[:conversation_id])
  @message = @conversation.messages.build(message_params)
  @message.user_id = current_user.id
  @message.save!
  redirect_to @conversation
end

【讨论】:

  • 试过了,但它会引导我进入一个包含所有消息列表的新页面,而不是让消息显示在聊天框中。
【解决方案2】:

确保你的 jquery_ujs 被正确加载。

或者尝试使用 //= require_tree 。在你的 application.js 中一次

【讨论】:

  • 我试过 require_tree 但这并没有解决问题。我如何知道 jquery_ujs 是否正确加载?
猜你喜欢
  • 1970-01-01
  • 2017-10-13
  • 2015-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-01
  • 2020-11-18
  • 1970-01-01
相关资源
最近更新 更多