在这种情况下,Ruby运算符==做了什么?

时间:2013-01-22 18:04:25

标签: ruby

我目前正在查看piece of code from the excellent Rails-composer并且我不明白第3行中的嵌入式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 documentation并没有运气。一旦我理解了这段代码是如何工作的,我想扩展它以支持所有级别的flash[]消息。

4 个答案:

答案 0 :(得分:6)

这是Ternary Operator

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

name == :notice使用"success""error"

答案 1 :(得分: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

答案 2 :(得分:1)

该代码动态更改div类。它检查:通知和div类将得到:

  • “alert alert-success”
  • “alert alert-error”

取决于:通知结果。

答案 3 :(得分:0)

显示闪光灯的内容。闪存的每个键值对都显示为一个单独的div,div的类别取决于键。

第3行添加了一类警报成功或警告失败,具体取决于密钥是否:通知