【问题标题】:How to change flash[:notice] placement only on one page in Rails?如何仅在 Rails 的一页上更改 flash[:notice] 位置?
【发布时间】:2015-06-30 21:08:40
【问题描述】:

除了一页之外,我需要将所有的 Flash 通知放在页眉下方。

我应该只在一页上以不同的方式放置它。

编辑

我在我的动作中添加了,我想在这行中使用另一个布局:

  render :layout => 'show'

现在,当我要显示页面时,它给了我:

  undefined method `url' for nil:NilClass

但不渲染此布局 - 没有错误。

编辑

在 Rails 中可以吗?

【问题讨论】:

  • 使用布局。例如,一种布局是主布局,在那里你渲染你的 flash,第二种是你的不同布局,带有特定的 flash 渲染
  • @Denis, привет тёзка) 当我创建 show 布局时开始出现奇怪的错误。
  • 什么样的错误?发布它们会有所帮助。
  • 我使用相同的默认布局,但没有通知消息。
  • 您不必为了 1 次更改而复制整个布局。为什么不显示带有 if 条件的 flash?如果 current_page 等...

标签: ruby-on-rails notice


【解决方案1】:

在我的脑海中,你可以在视图中检查当前的控制器#action,看看我们的 flash 消息是否需要移动。

Rails 将这些参数传递给每个视图(例如:如果我们在 UsersControllershow 操作中):

params[:controller] #=> users
params[:action]     #=> show

我们可以添加一个助手来简化我们在视图中的条件:

# file: app/helpers/application_helper.rb
def move_flash_messages?
  params[:controller] == "users" && params[:action] == "show"
end

然后在我们的布局中做这个简单的检查:

# file: app/views/layouts/application.html.haml
- unless move_flash_messages?
  = flash_messages
...
- if move_flash_messages?
  = flash_messages

【讨论】:

    【解决方案2】:

    这很容易在任何地方显示 Flash 消息

      <% flash.each do |name, msg| %>
        <%= content_tag :div, msg, class: "flash notice" , id:"flash_notice" %>
      <% end %>
    

    这是用于 Flash 消息的 css

    div.flash.notice {
      background: url(../images/true.png) 8px 5px no-repeat;
      background-color: #dfffdf;
      border-color: #9fcf9f;
      color: #005f00;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      • 2011-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-30
      • 1970-01-01
      相关资源
      最近更新 更多