28

ハハ..

Chronic を使用して、ユーザーがカレンダーに追加した時間を解析しています。コードが機能し、適切な時刻が実装されている場合、最終的な結果は、ユーザーが時刻を追加した場合、日付がなく、日付がないため結果に表示されません。何か案は?

def set_dates
  unless self.natural_date.blank? || Chronic.parse(self.natural_date).blank?
    # check if we are dealing with a date or a date + time
    if time_provided?(self.natural_date)
      self.date = nil
      self.time = Chronic.parse(self.natural_date)
    else
      self.date = Chronic.parse(self.natural_date).to_date
      self.time = nil
    end
  end

  unless self.natural_end_date.blank? || Chronic.parse(self.natural_end_date).blank?
    # check if we are dealing with a date or a date + time
    if time_provided?(self.natural_end_date)
      self.end_date = nil
      self.end_time = Chronic.parse(self.natural_end_date)
    else
      self.end_date = Chronic.parse(self.natural_end_date).to_date
      self.end_time = nil
    end
  end
end

編集:

ここにtime_provided? 方法:

def time_provided?(natural_date_string)
  date_span = Chronic.parse(natural_date_string, :guess => false)
  (date_span.last - date_span.first).to_i == 1
end
4

1 に答える 1

3

まず、コードが意図的にあなたが説明したことを行っているように見えるので、あなたが何を求めているのかよくわかりません... 時間が提供されると、日付フィールドが割り当てられnilます。そして、それがあなたのコードがどのように機能するかという理由で、それが慢性的なものであるとは思いません。

あなたのデザイン(なぜ別々の日付と時刻のフィールドがあるのか​​ )、フィールドの種類などがわからないので、次のようなちょっとしたコツから始めることをお勧めします:

if time_provided?(self.natural_date)
  self.time = Chronic.parse(self.natural_date)
  self.date = self.time.to_date

また:

self.end_date = Chronic.parse(self.natural_date).to_date
if time_provided?(self.natural_date)
  self.time = Chronic.parse(self.natural_date)
end

または、問題はあなたが提供したコードの外にあるかもしれません:「日付がないため、結果に表示されない」という動作を担当する部分でしょうか? 条件をもっと柔軟にしたほうがいいのでは?

于 2010-05-13T07:44:06.447 に答える