我是一个初学者在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
2条答案
按热度按时间jqjz2hbq1#
闪存的工作原理
Rails闪存设置为允许您存储数据,以便在 * 下一个请求 *(即发生重定向并开始新的请求周期后)使用。
来自操作控制器概述- Ruby on Rails指南
默认情况下,将值添加到闪存将使其可用于下一个请求,但有时您可能希望在同一请求中访问这些值...为此,您可以使用
flash.now
当你用JS响应时,在请求完成后没有重定向。这意味着在JS请求期间把东西放在闪存中将使它只对 * 下一个请求 * 可用。
因此,*要在同一请求 * 中使用快讯 ,您必须使用
flash.now
使用
flash.now
您使用
flash.now
的方式与使用常规闪存的方式完全相同。就你而言
其他资源
b91juud32#
制造商控制器操作创建:
浏览/制造/索引.html.erb
查看/制造/创建.js.erb
添加此文件:查看/共享/_消息.html.erb