我是 Ruby 和 Rails 的新手(从 Python 和 Python 框架切换)。我正在编写一个简单的仪表板网站,它显示有关硬盘 SMART 状态的信息。在这里,我编写了一个助手,如果它的值满足条件,则在相关 SMART 属性附近的表格单元格中显示一个徽章。起初,帮助程序代码与清单 1中一样简单,但后来我决定绘制特定驱动器的所有标记的摘要,以及表中各个 SMART 属性附近的标记。所以起初我添加了一个简单的方法,例如:
def smart_chk_device(attrs)
attrs.each { |item| smart_chk_attr(item) }
end
但是这种方法不起作用,它导致整个属性数组输出到结果页面。当我按照清单 2制作它时,它才开始起作用,但我相信那里有问题,同样的事情可以用更简单的方式完成。请告诉我正确的 Ruby 方式。
清单 1:
module HomeHelper
def smart_chk_attr(attr)
case attr[:id].to_i
when 1,197
content_tag(:span, "Warning", :class => "label label-warning") if attr[:raw].to_i > 0
when 5,7,10,196,198
content_tag(:span, "Critical", :class => "label label-important") if attr[:raw].to_i > 0
end
end
end
清单 2(有效,但我不喜欢它):
module HomeHelper
def smart_chk_attr(attr)
case attr[:id].to_i
when 1,197
return content_tag(:span, "Warning", :class => "label label-warning") if attr[:raw].to_i > 0
when 5,7,10,196,198
return content_tag(:span, "Critical", :class => "label label-important") if attr[:raw].to_i > 0
else
return String.new
end
return String.new
end
def smart_chk_device(attrs)
output = ""
attrs.each { |item| output << smart_chk_attr(item) }
return output.html_safe
end
end
attrs是一个 Hash 数组,其中每个 Hash 包含键:id和:raw以及 SMART 属性的数字代码及其 RAW 值,两者都在字符串中。
此外,如果删除清单 2 中的最后一个“return String.new”,RoR 会抱怨。为什么会这样?“案例”不是阻止了所有可能的案例,因此控制永远不会到达函数的末尾吗?