【问题标题】:How to display a Rails flash notice upon redirect?如何在重定向时显示 Rails 闪烁通知?
【发布时间】:2013-03-20 20:33:40
【问题描述】:

我在 Rails 控制器中有以下代码:

flash.now[:notice] = 'Successfully checked in'
redirect_to check_in_path

然后在 /check_in 视图中:

<p id="notice"><%= notice %></p>

但是,通知没有出现。如果我不在控制器中重定向,那就完美了:

flash.now[:notice] = 'Successfully checked in'
render action: 'check_in'

我需要一个重定向...不仅仅是那个动作的渲染。重定向后可以有flash通知吗?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 ruby-on-rails-4 rails-flash


    【解决方案1】:

    删除.now。所以就写吧:

    flash[:notice] = 'Successfully checked in'
    redirect_to check_in_path
    

    .now 应该专门用于渲染而不是重定向时。重定向时不使用.now

    【讨论】:

    • 完美!谢谢。由于某种原因,这让我又等了 6 分钟才能接受答案......
    【解决方案2】:
    redirect_to new_user_session_path, alert: "Invalid email or password"
    

    你可以使用:notice代替:alert

    显示

    【讨论】:

      【解决方案3】:

      或者你可以在一行中完成。

      redirect_to check_in_path, flash: {notice: "Successfully checked in"}
      

      【讨论】:

      • @JayEl-Kaake 你用的是什么 ruby​​ 版本?
      • 这是不久前的事了,所以我不确定...我会编辑我的评论,因为它看起来应该可行。
      • path, flash: {notice: ... 看起来像 Rails 3,而 path, alert: ... 是 Rails 4+
      • 不错的解决方案,因为它还允许不同类型的消息,例如闪光:{成功:“文本”}
      【解决方案4】:

      这个也可以

      redirect_to check_in_path, notice: 'Successfully checked in'

      【讨论】:

        【解决方案5】:

        如果您使用的是 Bootstrap,这将在您的重定向目标页面上显示格式正确的 flash 消息。

        在您的控制器中:

        if my_success_condition
          flash[:success] = 'It worked!'
        else
          flash[:warning] = 'Something went wrong.'
        end
        redirect_to myroute_path
        

        在你看来:

        <% flash.each do |key, value| %>
          <div class="alert alert-<%= key %>"><%= value %></div>
        <% end %>
        

        这将产生如下 HTML:

        <div class="alert alert-success">It worked!</div>
        

        有关可用的引导警报样式,请参阅:http://getbootstrap.com/docs/4.0/components/alerts/

        参考:https://agilewarrior.wordpress.com/2014/04/26/how-to-add-a-flash-message-to-your-rails-page/

        【讨论】:

          【解决方案6】:

          我遇到了同样的问题,你的问题解决了我的问题,因为我忘记包含在 /check_in 视图中:

          <p id="notice"><%= notice %></p>
          

          在控制器中,只有一行:

          redirect_to check_in_path, :notice => "Successfully checked in"             
          

          【讨论】:

          • 你的问题不同。我有&lt;%= notice %&gt; 标签,但什么都没有出现
          猜你喜欢
          • 1970-01-01
          • 2014-07-20
          • 2012-01-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-30
          相关资源
          最近更新 更多