【问题标题】:rails 4 -- flash noticerails 4 - 闪光通知
【发布时间】:2014-04-29 06:02:55
【问题描述】:

我仍在开发我的 rails 4 演示站点,但我看到了一件奇怪的事情。在控制器中有这样一行:

format.html { redirect_to @widget, notice: 'Widget was successfully created.' }

这会在重定向页面中呈现一条 Flash 消息,这是预期的。但是,附加到消息 div 的 css 类是 alert alert-notice,而不是有效的 Bootstrap 警报类,例如 alert-info

在哪里为这个 flash 设置的类,以及如何自定义它?

另外,如果我通过 ajax 删除记录,有没有办法访问核心 flash 容器以通过 js 显示消息,或者我是否必须仅为 ajax 请求显示/隐藏我自己的 flash 消息 div?

编辑:我的 Michael Hartl 启发了layouts/application.html.erb

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

谢谢!

编辑2:

也许我最初的问题不够清楚。在这种情况下,我完全了解如何在 flash 对象中设置类。我有兴趣学习如何在format.html 块中使用和自定义notice:。似乎应该有一种方法可以通过此通知通过课程?或者这不是 Rails 的核心做事方式?

【问题讨论】:

  • 这取决于你的看法。查看您的 views/layouts/application.html.* 文件,看看它在哪里呈现 flash 内容。
  • 但 alert alert-notice 是有效的引导类。您可以在重定向操作之前始终闪烁 [:yourchoiceofalert]
  • 您可能需要从您的资产中删除 scaffold.css,因为它会扰乱一些引导类
  • @StavrosSouvatzis-- getbootstrap.com/components/#alerts -- 我不认为 alert-notice 是一个有效的类。我错过了什么吗?此外,我的资产中没有scaffold.css。谢谢!
  • 是的,对不起,notice 不是一个案例,我的意思是你需要有像“alert alert-'class'”这样的单词alert。很抱歉误导,我应该这样做。

标签: ruby-on-rails ruby twitter-bootstrap ruby-on-rails-4


【解决方案1】:

application.html.erb 中,您将显示flash 消息。

如下更新该代码

  <% flash.each do |name, msg| %>
    <%= content_tag :div, msg, class: "alert alert-info" %>
  <% end %>

您可以在class 选项中添加要应用到闪存消息的类。

编辑

该类设置为alert alert-notice,因为您的代码中有alert alert-&lt;%= key %&gt;。 当你拨打redirect_to @widget, notice: 'Widget was successfully created.

将在flash 哈希中添加一条闪存消息,其中键为notice,值为Widget was successfully created.,即,

flash[:notice] = "Widget was successfully created."

编辑#2

format.html { redirect_to @widget, notice: 'Widget was successfully created.' }

notice: 'Widget was successfully created.' 是传递给redirect_to 方法的参数。在这个方法中添加到flash哈希中。

【讨论】:

  • 谢谢,我意识到这就是应用该课程的原因。我想我在问notice:format 块中是如何工作的,以及它是如何被访问并变成flash 而不是传递flash 对象的。
  • 对不起,我的意思是format.html 块——notice: 元素是如何被解释的,在哪里?如何为 flash 设置自定义类?
  • @user101289 有关notice: element get interpreted, 问题,请参阅编辑#2 部分。
  • 如果您有更多问题,您应该将它们作为新问题发布。离开 cmets 讨论当前问题,即Where is the class being set for this flash, and how do I customize it?
【解决方案2】:

添加到

app/controllers/application_controller.rb

class ApplicationController
  add_flash_types :success, :warning, :danger, :info
end

然后您可以在控制器中执行此操作

format.html { redirect_to @widget, success: 'Widget was successfully created.' }

如果你在布局中这样做了

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

【讨论】:

【解决方案3】:

如果你不想像@Sachin Mour 所说的那样弄乱你的ApplicationController,你可以相应地添加一些额外的CSS 类:

app/assets/stylesheets/custom.scss:

/*flash*/
.alert-error {
    background-color: #f2dede;
    border-color: #eed3d7;
    color: #b94a48;
    text-align: left;
 }

.alert-alert {
    background-color: #f2dede;
    border-color: #eed3d7;
    color: #b94a48;
    text-align: left;
 }

.alert-success {
    background-color: #dff0d8;
    border-color: #d6e9c6;
    color: #468847;
    text-align: left;
 }

.alert-notice {
    background-color: #dff0d8;
    border-color: #d6e9c6;
    color: #468847;
    text-align: left;
 }

分步教程,如何使用设计和引导程序处理 Flash 消息,您可以找到 here

【讨论】:

    猜你喜欢
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 1970-01-01
    • 2015-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多