予定のリストを返します。
現在、次のようになっています。
-Jan 1
--appointment @230
-Jan 1
--appointment @3
-Jan 1
--appointment @4
-Jan 2
--appointment @4
-Jan 2
--appointment @5
次のようなリストを返したいのですが
-Jan 1
--appointment @230
--appointment @3
--appointment @4
-Jan 2
--appointment @4
--appointment @5
予定には、DateTimeである「start_at」フィールドがあります。比較的簡単です。コレクションを繰り返し処理してから、それを最も適切な方法でグループ化する方法がわかりません。
ありがとう。
ユーザー(ユーザーまたはトレーナー)has_many:appointments has_many:trainer_appointments、:class_name => "Appointment"、:foreign_key => "trainer_id"
予定
# Table name: appointments
#
# id :integer not null, primary key
# trainer_id :integer
# start_at :datetime
# created_at :datetime not null
# updated_at :datetime not null
# user_id :integer
ここにいくつかのプレイコードがあります:u.trainer_appointments
=> [#<Appointment id: 6, trainer_id: 1, start_at: "2012-11-18 13:08:00", created_at: "2012-10-17 02:01:42", updated_at: "2012-10-17 02:01:42", user_id: 2>, #<Appointment id: 7, trainer_id: 1, start_at: "2012-11-18 13:08:00", created_at: "2012-10-17 02:02:00", updated_at: "2012-10-17 02:02:00", user_id: 2>, #<Appointment id: 8, trainer_id: 1, start_at: "2012-11-24 13:08:00", created_at: "2012-10-17 02:03:28", updated_at: "2012-10-17 02:03:28", user_id: 2>]
3つの予定を返します。2つは同じ日にあります。別の日に1。
日付でグループ化された方法でそれを返したいと思います。私はそれを理解するためにこのようなことを試みましたが、迷子になりました:
u.trainer_appointments.collect {|each| each.start_at}.uniq.collect {|each| u.trainer_appointments.find_by_start_at(each.to_date.beginning_of_day..each.to_date.end_of_day)}
これは2つの予定を返しました。両方の日付の間。初日の2日欠席。
私はコードが非常に多くのレベルで間違っていることを知っています。私はただ繰り返しをいじろうとしていました。でも欲しいものが手に入らなかった。おそらく、最終的な配列で範囲が返されることを期待していたにもかかわらず、uniqが何らかの方法で戻りサイズを制限しているためです。
グループ化を繰り返すために必要な実際の構造がわかりません。これは私の専門知識ではありません。グループ化された配列内の配列?ビューでそれをどのように繰り返すのでしょうか?
ありがとう。