web-dev-qa-db-ja.com

RoR、DateTime / TimeWithZoneから反復できない

開始日と終了日を取り、日/日付をループする単純なタスクがあります。このコードは私のdb:seed rakeタスクで使用されています。現在、私のコードは次の試みを経ています。

(someModel.start_date.to_datetime..someModel.end_date.to_datetime).each { 
    |x| puts x 
}
 ......
(someModel.start_date...someModel.end_date).each { |x| puts x }

いずれの場合も、このようなエラーが発生します。

can't iterate from ActiveSupport::TimeWithZone
or 
can't iterate from DateTime

誰かがDateTimeの範囲を反復処理する方法について手がかりを持っている場合、私は非常に感謝します。

26
Black Dynamite
start = someModel.start_date.to_datetime
finish = someModel.end_date.to_datetime
while(start < finish) do
  #bunch of awesome stuff
  start += 1.day
end
23
Chris Barretto

to_dateを呼び出して)Dateオブジェクトを処理していることを確認する必要があります。そうすると、すべてが期待どおりに機能します。

start_date.to_date.upto(end_date.to_date) {|date| puts date }

または範囲付き:

(start_date.to_date..end_date.to_date).to_a
9
collimarco

DateTimeから繰り返すことはできません。ただし、間隔の開始と終了がDateのインスタンスである場合は反復できます。可能であれば変換してください。

次に、これらのDateメソッドを見てください。

eachの代わりに使用する

3
vrybas

範囲を反復処理する場合は、ループを検討し、someModel.start_date + 1.day.to_iのようなものを使用して毎日ステップすることができます。

0
elixir