0

我目前正在查看来自优秀 Rails-composer 的一段代码,但我不明白第三行中的 Embedded Ruby 做了什么:

<% flash.each do |name, msg| %>
  <% if msg.is_a?(String) %>
    <div class="alert alert-<%= name == :notice ? "success" : "error" %>">
      <a class="close" data-dismiss="alert">&#215;</a>
      <%= content_tag :div, msg, :id => "flash_#{name}" %>
    </div>
  <% end %>
<% end %>

到目前为止,我已经查看了Ruby 文档,但没有运气。一旦我理解了这段代码是如何工作的,我想扩展它以支持所有级别的flash[]消息。

4

4 回答 4

6

这是三元运算符

(condition) ? "true value" : "false value"

意思是 if name == :noticeuse "success"else "error"

于 2013-01-22T18:09:06.190 回答
2

这条线

result = (name == :notice ? "success" : "error")

可以翻译成:

result =""
if(name == :notice)
{
 result = "success"
}
else
{
 result = "error"
}

在您的情况下,结果不是变量,但它的值被粘贴到 html。

编辑

我想扩展它以支持所有级别的 flash[] 消息。

这个运算符通常只用于简单的真假条件,但如果你真的想要你可以像这样使用它:

name == :notice ? "success" : name == :error ? "error" : "something else"

考虑改用这个(更具可读性)

if name == :notice
 "success"
elsif name == :error
 "error"
else
 "something else"
end
于 2013-01-22T18:15:14.830 回答
1

该代码动态更改 div 类。它检查 :notice 并且 div 类将获得:

  • “警报警报成功”
  • “警报警报错误”

取决于 :notice 结果。

于 2013-01-22T18:21:41.433 回答
0

它正在显示闪存的内容。flash的每个键值对都显示为一个单独的div,div的类取决于key。

第 3 行根据键是否为 :notice 添加了一类 alert-success 或 alert-failure

于 2013-01-22T18:11:31.753 回答