1

私は手元に非常に単純なタスクを持っています。レコードが最後に更新されてから 15 分以上経過している場合は、ボタンを表示します。それ以外の場合は、ボタンを表示しません。

フィールドは日時です。

私のビューコード:

<% if @object.display_button? -%>
  my button
<% end -%>

そのオブジェクトの表示ボタン メソッド:

def display_button?
  return false if last_updated.nil?
  if Time.now - last_updated > 15.minutes
    true
  else
    false
  end
end

私もこのユニットをテストしましたが、これは合格していますが、実装に関してはうまくいかないようです。

私の論理は正しいですか、それともこれを達成するためのより良い方法がありますか?

4

1 に答える 1

7
if last_updated < 15.minutes.ago

minutes メソッドは私が信じている整数を返し、time オブジェクトを減算すると別の time オブジェクトが生成されます。したがって、式は int を時間と比較し、予期しないことを行います。

15.minutes.ago別の時間オブジェクトと直接比較できる時間オブジェクトを生成します。


if (something) return true; else; return falseまた、ルビーでは絶対にやらないでください。メソッドは最後に実行された式の値を返すため、メソッド全体を大幅に簡素化できます。

def display_button?
  last_updated && last_updated < 15.minutes.ago
end

そのほうが読みやすいではないか。

于 2009-02-24T17:01:44.373 に答える