gpt4 book ai didi

ruby-on-rails - 如何在 remote true 时呈现 flash 消息

转载 作者:行者123 更新时间:2023-12-05 06:22:21 25 4
gpt4 key购买 nike

我有一个从我的 View 调用的时间记录器 Controller 方法,称为 _embed_menu.html.erb

<%= link_to l(:start_time_logger) + ' #' + @issue.id.to_s + ' ',
{:controller => '/time_loggers', :action => 'start', :issue_id => @issue.id},
:class => 'icon icon-start',
:"data-replace" => '#time-logger-menu',
:remote => true
%>

'start' 方法的部分,我在其中显示错误:

      respond_to do |format|
format.js{ flash[:error] = l(:start_time_expired_error)}
end

现在到渲染 flash 消息的部分。 application_helper.rb具有render_flash_messages功能。

  def render_flash_messages
s = ''
flash.each do |k,v|
s << content_tag('div', v.html_safe, :class => "flash #{k}", :id => "flash_#{k}")
end
s.html_safe
end

并且该函数在 base.html.erb 模板上调用。

<%= render_flash_messages %>

所以结果 - 我启动了一个启动方法,只有在我重新加载页面后才会显示 flash。我还尝试重定向,希望在重定向之后错误会显示出来。

redirect_to controller: 'issues', format: 'js'

但没有结果。

也许我可以触发 <%= render_flash_messages %> 的重新渲染?

最佳答案

当您单击 remote: true 链接时,Rails 会创建对 text/javascript 的请求,然后在该页面中运行生成的 javascript。

通常 js.erb 模板包含一些修改文档的 javascript:

$("<%= escape_javascript(render @user) %>").appendTo("#users");

因此,如果您想更改页面上的 flash 消息,您需要定位包装元素并附加它:

$("<%= escape_javascript(render_flash_messages) %>").appendTo("#flashes");

这假设您在 flash 消息周围有一个包装元素。否则只需在布局中添加一个。

<div id="flashes">
<%= render_flash_messages %>
</div>

关于ruby-on-rails - 如何在 remote true 时呈现 flash 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59285919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com