ruby-on-rails 如何使用jQuery在Rails上显示快速消息(SJR)

zd287kbt  于 2022-11-19  发布在  Ruby
关注(0)|答案(2)|浏览(180)

我是一个初学者在web开发和jQuery。
我希望在创建新消息时,屏幕上会弹出一条即时消息。使用下面的代码,在创建新聊天消息时,屏幕上会弹出一条新的聊天消息,而无需重新加载。但是,即时消息不会在创建聊天消息的同时出现。
有人知道如何处理这个问题吗?任何建议都将不胜感激。
提前感谢!
我的第一语言不是英语,所以如果你有任何问题或这篇文章没有意义,让我知道!
这是我的代码。
message/create.js.erb

$("#message_body").val("");
$("ul").html("<%=j(render @messages) %>");
$("#layout-notice").html("<%=j flash[:notice] %>");

messages_controller.rb

def index
  @messages = @chat_group.messages
  @message = Message.new
end

def create
  @message = Message.new(message_params)
  @message.chat_group = @chat_group
  @message.user = current_user
  # @message.save

  if @message.save
    flash[:notice] = 'successfully sent'
  else
    flash[:notice] = 'Unfortunately failed to sent'
  end

  @messages = @chat_group.messages.all
end

messasges/index.html.haml

- if user_signed_in?
   = form_for @message, :url => {:action => :index}, remote: true do |f|
   = f.text_field :body
   = f.submit 'send'
  %ul
   = render @messages
   = link_to "sign out", destroy_user_session_path, method: :delete
  - else
   %h1 you need to log in
   = link_to "sign in", user_session_path, method: :post
jqjz2hbq

jqjz2hbq1#

闪存的工作原理

Rails闪存设置为允许您存储数据,以便在 * 下一个请求 *(即发生重定向并开始新的请求周期后)使用。
来自操作控制器概述- Ruby on Rails指南
默认情况下,将值添加到闪存将使其可用于下一个请求,但有时您可能希望在同一请求中访问这些值...为此,您可以使用flash.now
当你用JS响应时,在请求完成后没有重定向。这意味着在JS请求期间把东西放在闪存中将使它只对 * 下一个请求 * 可用。
因此,*要在同一请求 * 中使用快讯 ,您必须使用flash.now

使用flash.now

您使用flash.now的方式与使用常规闪存的方式完全相同。
就你而言

if @message.save
  flash.now[:notice] = 'successfully sent'
else
  flash.now[:notice] = 'Unfortunately failed to sent'
end

其他资源

b91juud3

b91juud32#

制造商控制器操作创建:

def create
    @manufacture = Manufacture.new(manufacture_params)
    respond_to do |format|
      if @manufacture.save
        format.js { flash.now[:notice] = "Manufacture was successfully created." }
      else
        format.html { redirect_to manufactures_url, alert: @manufacture.errors.full_messages }
      end
    end
  end

浏览/制造/索引.html.erb

<div id="flash-message">
</div>

查看/制造/创建.js.erb

$("#flash-message").html("<%= j render partial: "shared/message"%>");

添加此文件:查看/共享/_消息.html.erb

<% if notice %>
  <div class="alert alert-success alert-dismissible fade show col-4 mx-auto mt-5" role="alert">
    <h4><%= notice %></h4>
    <button type="button" class="close" data-dismiss="alert" aria-label="Close">
      <span aria-hidden="true">&times;</span>
    </button>
  </div>
<% end %>
<% if alert %>
  <div class="alert alert-warning alert-dismissible fade show col-4 mx-auto mt-5" role="alert">
    <h4><%= alert %></h4>
    <button type="button" class="close" data-dismiss="alert" aria-label="Close">
      <span aria-hidden="true">&times;</span>
    </button>
  </div>
<% end %>

相关问题