1

2つの:datetimeフィールドを比較し、レコードの先頭から「経過」時間として表示する差を取得する必要があるアプリを作成しています。私は自分のコードが正しいと思いますが、以下のエラーが発生し続けます。誰かが私が間違っていることを教えてもらえますか?

Error on view:
undefined method `-' for nil:NilClass line 26:
26:     <td><%= link_to call.elapsed_time, call %></td>

Call.rb (abbreviated)
before_create :set_dispatched_time

def set_dispatched_time
  self.dispatched_time = Time.now
end

def elapsed_time
  self.dispatched_time - Time.now
end

PGのフィールドは:datetimeとして設定されているため、時間を計算できます(文字列として持っていました)が、何らかの理由で計算されていません。最初にTime.parseを呼び出す必要がありますか、それともそのようなものですか?どちらの方向に進むべきかよくわかりません。Time.nowからdispatched_timeフィールドを減算したいだけです

4

1 に答える 1

3

エラーメッセージによるとあなたself.dispatched_timeは存在しません、それはゼロです。これはbefore_create、オブジェクトがデータベースに初めて永続化されたときに呼び出され、この特定のインスタンスがまだ保存されていないことが原因である可能性があります。

まず、この変数に値があることを確認するか、割り当てられていない場合はデフォルト値を割り当ててください。例えば:

def elapsed_time
  Time.now - (self.dispatched_time || Time.now)
end
于 2012-06-22T16:55:56.703 に答える