私の見解ではこれがあります:Due <%= time_ago_in_words(todo.due) %>
しかし、time_ago_in_wordsのほとんどのユースケースとは異なり、私はtimeAGOとtimeAHEADをサポートする必要があります。期日は延滞(時間前)と近日(時間先)になる可能性があるため、これを条件付きで表示するにはどうすればよいですか。延滞の場合、上記のコードは「期限x日前」を出力し、期限が将来の場合「x日で期限」を出力しますか?
私の見解ではこれがあります:Due <%= time_ago_in_words(todo.due) %>
しかし、time_ago_in_wordsのほとんどのユースケースとは異なり、私はtimeAGOとtimeAHEADをサポートする必要があります。期日は延滞(時間前)と近日(時間先)になる可能性があるため、これを条件付きで表示するにはどうすればよいですか。延滞の場合、上記のコードは「期限x日前」を出力し、期限が将来の場合「x日で期限」を出力しますか?
erbテンプレートエンジンを使用している外観から、=記号を削除することで、ビューロジックの条件を実行できます。したがって、次のようなことができます。
<% if time_ago < Time.now %>
<%= time_ago_in_words(todo.due) %>
<% else %>
<%= time_ahead_in_words(todo.due) %>
<% end %>
あなたに何をすべきかについての考えを与えるべきです。より良い方法は、おそらくこれをRailsアプリのモデル部分に移動することだと思います。私の一般的な公理はFatModelsスキニーコントローラーですが、それはルールよりもアドバイスです。
編集
アレックスは以下のコメントで言及していますが、これはおそらくアプリのモデル部分ではなく、ヘルパーメソッドで行う必要があります
次のような独自のヘルパーを作成できます。
def time_diff_in_words(from_time)
# compute days difference from now
days_delta = (Time.now - from_time) / (24 * 60 * 60)
# render text
days = pluralize(days_delta, 'day')
days_delta > 0 ? "Due #{days} ago" : "Due in #{days}"
end
モデルには次のものがあります。
class Someclass < ActiveRecord::Base
attr_reader :time_diff
def time_diff
time_difference =
if todo.due > Time.new()
todo - Time.new()
else
Time.new() - todo.due
end
end
time_difference.strftime("%I:%M%p") # This gets returned.
end
あなたの見解では:
<%= time_in_words(@db_record.time_diff) %>
Where @db_record is a row in the database table for the model in question.