1

私の見解ではこれがあります:Due <%= time_ago_in_words(todo.due) %>

しかし、time_ago_in_wordsのほとんどのユースケースとは異なり、私はtimeAGOとtimeAHEADをサポートする必要があります。期日は延滞(時間前)と近日(時間先)になる可能性があるため、これを条件付きで表示するにはどうすればよいですか。延滞の場合、上記のコードは「期限x日前」を出力し、期限が将来の場合「x日で期限」を出力しますか?

4

4 に答える 4

3

erbテンプレートエンジンを使用している外観から、=記号を削除することで、ビューロジックの条件を実行できます。したがって、次のようなことができます。

<% if time_ago < Time.now %>
<%= time_ago_in_words(todo.due) %>
<% else %>
<%= time_ahead_in_words(todo.due) %>
<% end %>

あなたに何をすべきかについての考えを与えるべきです。より良い方法は、おそらくこれをRailsアプリのモデル部分に移動することだと思います。私の一般的な公理はFatModelsスキニーコントローラーですが、それはルールよりもアドバイスです。

編集

アレックスは以下のコメントで言及していますが、これはおそらくアプリのモデル部分ではなく、ヘルパーメソッドで行う必要があります

于 2012-12-26T18:09:57.877 に答える
1

次のような独自のヘルパーを作成できます。

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
于 2012-12-26T18:19:27.360 に答える
1

モデルには次のものがあります。

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.
于 2012-12-26T18:16:58.697 に答える
0

自然言語の日時解析を扱う場合は、慢性的な宝石をお勧めします

日時の解析には多くの方法があります

HTH

于 2012-12-26T19:49:33.233 に答える