私はこれに頭を悩ませています。
属性を持つモデル (タスク) があります: :day、:room、:begin_time、:end_time、:gear、:notes、およびその他 (関係ありません)。Task モデルの移行セットには、linked_id_task 属性もあります。そして、私はこれらの関連するスコープを持っています(私は一緒に連鎖しています):
scope :for_day, lambda { |day| where(day: day) }
scope :for_room, lambda { |room| where(room: room) }
scope :with_gear, lambda { |gear| where(gear: gear) }
@tasks_on_same_day = Task.for_day(self.day).for_room(self.room).with_gear(self.gear).all
@task_on_previous_day = Task.for_day(self.day.yesterday).for_room(self.room).with_gear(self.gear).last
@task_on_next_day = Task.for_day(self.day.tomorrow).for_room(self.room).with_gear(self.gear).first
新しいタスクを作成する場合でも、新しいタスクを更新する場合でも、次のことを行います。
プライベート インスタンス メソッドで前のタスクと次のタスク ( :begin_time に基づく) を確認します。そして次は?前のタスクがある場合は、その :notes を更新して、そのタスクを :linked_task_id; に追加します。次のタスクがある場合は、次のタスクに関する情報を self.notes に設定し、:linked_task_id に追加します。当日(上記)、前日、翌日にタスクがない場合はnilを返します。
前日と翌日は単純です。なぜなら、前日の最後のタスク (存在する場合) または翌日の最初のタスクを取得するからです。当日に複数のタスクがある場合、タスクを並べ替えて、前後のタスクを簡単に見つけられるようにしたいと考えています。
@self_id = @tasks_on_same_day.index(self)
そのインデックスを使用して、前または次のタスクの update_attributes を実行します。問題は、新しく作成されたタスクまたは更新されたタスク (つまり、begin_time を更新したもの) が before_save コールバックで利用できるとは思えないことです。
現在の日のタスクのリストに自分自身を並べ替えるクラス メソッドを作成できます。
これをコード化してくれる人を探しているわけではありませんが、取るべきアプローチについて混乱しています。
ありがとう。