2017-10-17 8 views
0

多くの予約がある項目の日付範囲の日付のフラットな配列を取得したいと考えています。予約は:start_date:end_dateです。Ruby on Rails:開始日と終了日の範囲を使用して、日付のフラットな配列を作成します。

Booking A: 10/1/17 to 10/3/17 
Booking B: 11/2/17 to 11/4/17 

私はPluckの使用してみました:

の例では、アイテムは、これらの予約を持っています。 Item.bookings.pluck[:start_date, :end_date]、それは私が必要なもの私にこの[["10,01,17", "10,03,17"], ["11,02,17" , "11,04,17" ]]

のように見える配列を与えるには、まあ、範囲を得るために、あなたが実際のDateオブジェクトを必要とするこの["10,01,17", "10/02/17", "10,03,17", "11,02,17" , "11,03,17", "11/04/17"]

+0

をあなたは間の日付を持っている必要がありますあなたの配列の日付Xと日付Y? –

+0

(Date.today..Date.today + 10.days).to_a – eezee

+0

私のコントローラでは、クエリを書いてインスタンス変数に渡したいと思います。私はItem.bookings.pluck(:start_date、:end_date)を問い合わせることができ、それは私に開始日と終了日の配列を与えるでしょう。私はまず、各配列の開始日と終了日を含む範囲を取得してから配列を平坦化して、すべての日付が例のように1つの配列になるようにする必要があります。ありがとうございました! –

答えて

1

のような日付範囲でフラットな配列です。あなたのような文字列からそれらを取得するには、Date.strptimeを使用する必要があります。そして、あなたが日付のペアのうちの範囲を構築し、その後Date#strftimeバックの文字列に変換することができます:

require 'date' 
format = '%m/%d/%y' # mm/dd/yy; adjust as needed 
dates = Item.bookings.pluck(%i<start_date end_date>).map do |bounds| 
    Range.new(*bounds.map { |d| Date.strptime(d, format) }).map do |d| 
    d.strftime(format) 
    end 
end.flatten 

どのあなたの例のデータセットで私にこの与える:

["10/01/17", "10/02/17", "10/03/17", "11/02/17", "11/03/17", "11/04/17"] 
+0

お返事ありがとうございます。サポートされていない引数の型:シンボル。代わりにArelノードを構築する。 –

+0

'pluck'のように聞こえるのは、シンボルの配列が引数として好きではないのですか?元のコードで送信したものだと思っていました。 'pluck'コールは、あなたのために働くもののように見えるはずです。私の解決策とは何の関係もありません。それ以外の部分はどれもRailsのものには触れません。純粋なRubyです。 –

関連する問題