【问题标题】:Rails 5 flash not working for redirectRails 5 flash 不适用于重定向
【发布时间】:2017-03-16 04:41:15
【问题描述】:

我已经创建了 rails 5 应用程序,并且在控制器和视图中有以下代码用于显示 flash 消息。我看到很多这样的问题,但我无法解决问题。

控制器端

    respond_to do |format|
      if @trigger.update(trigger_params)
        flash[:success] = 'Trigger was successfully updated.'
        format.html { redirect_to edit_project_trigger_path(@trigger, project_secret_key: @project.secret_key) }
        format.json { render :show, status: :ok, location: @trigger }
      else
        error = ''
        @trigger.errors.full_messages.each do |msg|
          error += "#{msg} <br>"
        end
        flash.now[:error] = error
        format.html { render :new }
        format.json { render json: @trigger.errors, status: :unprocessable_entity }
      end
    end

查看侧面

<% if flash[:error].present?%>
    <div class="alert alert-danger alert-message alert-message-common" role="alert">
      <%= flash[:error].html_safe %>
    </div>
<% end %>
<% if flash[:notice].present? %>
    <div class="alert alert-success alert-message alert-message-common" role="alert">
      <%= flash[:notice].html_safe %>
    </div>
<% end %>
<% if flash[:alert].present? %>
    <div class="alert alert-danger alert-message alert-message-common" role="alert">
      <%= flash[:alert].html_safe %>
    </div>
<% end %>
<% if flash[:success].present?%>
    <div class="alert alert-success alert-message alert-message-common" role="alert">
      <%= flash[:success].html_safe %>
    </div>
<% end %>

使用警报时显示,但不显示成功消息。 rails 5 有问题还是我的代码有问题?

我希望警报因页面渲染而有效,而成功因重定向而无效。

【问题讨论】:

  • 在您向我们展示的代码中,您没有在flash[:success] 中设置任何值...还有比这更多的代码吗?在什么情况下你会期望在flash[:success] 中看到一些东西?
  • @TarynEast 我想在数据库中成功更新数据后显示成功消息。我被用于相同目的的 flash[:notice] 和 flash[:success]。
  • 1.将所有类型的 css 类更改为 alert-danger(因为警报正在工作)以进行测试。 2.然后试试这个solution
  • @Omkar 仍然存在同样的问题,我希望 css 中没有问题。

标签: ruby-on-rails flash-message


【解决方案1】:

默认情况下仅支持alertnotice flash 键。

添加success

class ApplicationController
  add_flash_types :successs

参考:Ruby Guides

【讨论】:

    【解决方案2】:

    试试这个:

    format.html { redirect_to edit_project_trigger_path(@trigger, project_secret_key: @project.secret_key), :success => 'Trigger was successfully updated.' }
    

    【讨论】:

      【解决方案3】:

      这应该可行:

      format.html { redirect_to edit_project_trigger_path(@trigger, project_secret_key: @project.secret_key), flash: {success: 'Trigger was successfully updated.'} }
      

      由于某些原因,在 Rails 中,您应该在 redirect_to 方法中 noticealert 键,但如果您需要成功或其他原因,您应该在 flash 键中使用嵌套哈希。

      在这里查看http://blog.remarkablelabs.com/2012/12/register-your-own-flash-types-rails-4-countdown-to-2013

      【讨论】:

        【解决方案4】:

        redirect_to 的 Rails 文档提到“对于常用的闪存名称 alertnotice 以及通用闪存存储桶有两个特殊的访问器。”您需要对任何其他人使用常规的 flash 语法。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-06-08
          • 2019-05-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-07
          • 2016-06-18
          相关资源
          最近更新 更多