1. ホーム
  2. ruby-on-rails

[解決済み] ビューのHTML要素に条件付きでクラスを追加するエレガントな方法とは?

2022-09-12 18:44:48

質問

私は時々、ある条件に基づいてhtml要素にクラスを追加する必要があります。問題は、それを行うためのきれいな方法を見つけ出すことができないことです。以下は、私が試したものの例です。

<div <%= if @status = 'success'; "class='ok'"; end %>>
   some message here
</div>

または

<% if @status == 'success' %>
   <div class='success'>
<% else %>
   <div>
<% end %>
   some message here
</div>

最初の方法は、見た目が混雑して読みにくいので好きではありません。2番目の方法は、ネストがめちゃくちゃになるので好きではありません。それをモデルの中に入れるのはいいことだと思います(たとえば @status.css_class のようなもの)、しかしそれはそこに属するものではありません。ほとんどの人はどうするのでしょうか?

どのように解決するのですか?

私は最初の方法を使いますが、もう少し簡潔な構文にします。

<div class="<%= 'ok' if @status == 'success' %>">

通常、成功はブール値で表現する必要がありますが true または数値のレコードIDで、失敗はブール値の false または nil . このようにすれば、変数をテストするだけでよいのです。

<div class="<%= 'ok' if @success %>">

三項を用いた第二の形式 ?: 演算子は2つのクラスのどちらかを選択したい場合に便利です。

<div class="<%= @success ? 'good' : 'bad' %>">

最後に、Railの レコードタグヘルパー のような div_for のようなタグを使用すると、与えられたレコードに基づいて自動的にIDとクラスが設定されます。 与えられた Person があり、IDが47であるとします。

# <div id="person_47" class="person good">
<% div_for @person, class: (@success ? 'good' : 'bad') do %>
<% end %>