各セルの異なる基準に基づいて、レールのテーブルセルにクラスを追加する最良の方法は何ですか?
たとえば...日付セルがあります。その日付から10日後に日付が近づいている場合は、「期日」クラスを追加する必要があります。または、日付が今日を過ぎている場合は、「期限切れ」クラスを追加します。
別のセルでは、文字列に基づいて、クラス「オン」または「オフ」が必要です。
これを行う方法はわかりませんが、おそらくビューにたくさんのロジックを含めるべきではないことはわかっています...
お知らせ下さい。
各セルの異なる基準に基づいて、レールのテーブルセルにクラスを追加する最良の方法は何ですか?
たとえば...日付セルがあります。その日付から10日後に日付が近づいている場合は、「期日」クラスを追加する必要があります。または、日付が今日を過ぎている場合は、「期限切れ」クラスを追加します。
別のセルでは、文字列に基づいて、クラス「オン」または「オフ」が必要です。
これを行う方法はわかりませんが、おそらくビューにたくさんのロジックを含めるべきではないことはわかっています...
お知らせ下さい。
次のような方法で実現できます。
class="#{(@date - Time.now <= 10.days) ? upcoming_due : '' %>"
ただし、おっしゃる通り、ビューにロジックが多いのは良くありません。同じコードを繰り返している場合は、次のようなヘルパー メソッドを追加できます。
def upcoming(date)
(date - Time.now <= 10.days) ? 'upcoming_due' : ''
end
def past(date)
(date - Time.now <= 10.days) ? 'past_due' : ''
end
あなたの見解では、次のようなものがあります。
class="#{ upcoming(@date).presence || past(@date).presence || '' }"
これは、ブラウザの Knockout で行うようなものです。基本的に、データベース内の各フィールドの監視可能なフィールドと、それらのフィールドに基づいてクラス名などを把握するための計算フィールドを備えたノックアウト モデルを作成します。次に、HTML テンプレートで data-bind 属性を使用して、ノックアウトの計算フィールドにバインドします。
このアプローチの欠点は、ユーザーがクラスを正しく適用するために JavaScript を有効にする必要があり、JavaScript にロジックを少し追加することです。しかし、javascript ファイルは、表示ロジックを配置するのに最適な場所だと思います。