1

誰かが最後にアプリにログインして保存したときに更新するアプリの小さなアップデーターを書いています。Rails 3.2およびRuby 1.9.3p327にあります

def update_last_seen
  if current_account.present?
    if (Date.current - 1.day) > current_account.last_login_at
      current_account.last_login_at = Date.current
      current_account.save
    end
  end
end

それをアプリケーション コントローラーに貼り付けて、before フィルターで呼び出しました。唯一のことは、時々ゼロの日付があることです。したがって、日付を nil と比較するとエラーが発生します。nil で to_date を呼び出すことはできません。

nil.to_f => 0.0
nil.to_i => 0
nil.to_s => ""
nil.to_date => NoMethodError: undefined method `to_date' for nil:NilClass
"2013/07/26".to_date => Fri, 26 Jul 2013

いわば空白の日付として受け入れるように設定するにはどうすればよいですか。

私はいつでもできる

if current_account.last_login_at.blank? || (Date.current - 1.day) > current_account.last_login_at

そこにない場合はそのように設定しますが、それを行う意味的な方法はありますか?

アップデート:

これは意味がないと思うかもしれません。私が尋ねる理由は、日付に nil を持つエンジンがいくつかあるからです。たとえば、Excel は日付を 2 つの方法で返します"06/12/2013"。その日付はnil、Ruby の nil のデフォルトの日付があることを望んでいた日付よりも優れています。ない場合は、コメントできません。申し訳ありません。理由の説明なしに反対票を投じることは、ボタンを押しているだけで何かを助けたり教えたりすることを本当に気にしないことを意味します。私がこの質問で何か間違ったことをした場合、それが意味をなさない場合は、それを修正してみてください。

4

2 に答える 2

1

NilClass実際の質問に答えるには...このようにモンキーパッチを適用できます

class NilClass
  def to_date
    Date.today
  end
end

nil.to_date  # => #<Date: 2013-09-26 ((2456562j,0s,0n),+0s,2299161j)>

もちろん、受け入れられた答えはより良いアプローチを示しています。

于 2013-09-26T21:22:41.733 に答える