Ruby と Rails は初めてです (Python と Python フレームワークから切り替えました)。ハードディスクの SMART 状態に関する情報を表示する簡単なダッシュボード Web サイトを作成しています。ここでは、値が条件を満たしている場合に、関連する 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はハッシュの配列で、各ハッシュにはキー:idと:rawが含まれ、SMART 属性の数値コードとその RAW 値が両方とも文字列で含まれます。
また、RoR は、リスト 2 の最後の「return String.new」を削除する必要があると主張します。なぜそうなるのでしょうか? 「ケース」は考えられるすべてのケースをブロックしないので、制御が関数の最後に到達することはありませんか?