-1

我有一个对应于各种闪存消息的符号列表:

:is_self
:already_exist
:already_added 
:invited 
:added

每次我运行我的方法时,answer都会为变量分配这些符号之一。message我将要显示的 Flash 消息分配给变量:

message = t("flash.#{answer.to_s}")

这工作正常。在我的方法结束时,我有类似的东西:

respond_to do |format|
  format.html { redirect_to url, flash: { info: message } }
end

我想更改 Flash 消息的颜色(在 之间切换info: success: error:)。如何设置一个包含正确颜色的散列变量来显示 Flash 消息?我试过类似的东西:

new_hash = { :is_self => "info:" , :already_exist => "info:" , :already_added => "info:", :invited => "success:", :added => "success:", }
flash_color = new_hash[answer]

进而:

respond_to do |format|
  format.html { redirect_to url, flash: { flash_color message } }
end

但我不会工作。我不知道如何给出正确的语法。

4

2 回答 2

3

假设,如果您使用twitter bootstrap 进行样式 flash,您可以将您的选择样式保存在application_helper.rb

module ApplicationHelper
  def flash_class(level)
    case level
    when :notice then "alert alert-info"
    when :success then "alert alert-success"
    when :error then "alert alert-warning"
    when :alert then "alert alert-danger"
    end
  end
end

在文件夹布局上创建文件_flash_message.html.erb并粘贴

<div>
  <% flash.each do |key, value| %>
    <div class="alert <%= flash_class(key).to_s %> fade in">
      <a href="#" data-dismiss="alert" class="close">×</a>
      <%= value %>
    </div>
  <% end %>
</div>

并调用您刚刚在视图中渲染的闪光灯

<%= render 'layouts/flash_message' %>
于 2013-02-05T12:14:47.380 回答
0

你有点混淆了语法。您最初获得的映射:

{ info: message }

是将符号映射:info到 的值的哈希值message。可以写成{ :info => message }

在您的哈希new_hash中,您在字符串中包含冒号,冒号在 ruby​​ 1.9 哈希语法中用于指示符号。我希望您会遇到语法错误,因为您不再以有效的方式设置哈希。

我认为您需要使用更传统的哈希语法并在new_hash. 像这样的东西应该工作:

new_hash = { 
  :is_self => :info, 
  :already_exist => :info, 
  :already_added => :info, 
  :invited => :success, 
  :added => :success, 
}

和:

flash_color = new_hash[answer]
respond_to do |format|
  format.html { redirect_to url, flash: { flash_color => message } }
end

PS 你这么称呼它也有点令人困惑flash_color——颜色只是它在前端设计的副产品。它们实际上只是闪存哈希中的键。

于 2013-02-05T13:30:00.623 回答