序文: 私は初心者です。
これは昨日解決したと思っていましたが、このドメイン用に適切に設計されたモデルがあるかどうかさえ疑問に思っています。
私は(自分の仕事に基づいて)タスクアプリを作成しています。これは私の 2 番目のラウンドです (最初のラウンドでは、テストを行っておらず、設計はうまくいきませんでした)。基本的に、日付、開始時刻と終了時刻、機材 (LCD プロジェクターなど) などを持つタスクを追加したいと考えています。 (または前日)、前のタスクをノート (:notes は列) で更新し、後でタスクが部屋にあることを示します。また、同じ部屋/ギアで次のタスクがあるかどうかを確認し、次のタスクに関する情報で現在のタスクを更新したいと考えています。以下に貼り付けたモデルコード:
class Task < ActiveRecord::Base
attr_accessible :begin_time, :day, :end_time, :gear, :notes, :preset, :room, :setup, :strike
before_create :initialize_linked_task_id
before_save :check_for_adjacent_tasks
validates :room, presence: true
validates :begin_time, presence: true
validates :end_time, presence: true
validates :gear, presence: true
validates :day, presence: true
scope :for_day, lambda { |day| where(day: day) }
scope :for_room, lambda { |room| where(room: room) }
scope :with_gear, lambda { |gear| where(gear: gear) }
private
def initialize_linked_task_id
@linked_task_id = []
end
def check_for_adjacent_tasks
@previous = prev?
@next = next?
unless @previous.nil?
set_linked_task_id(@previous)
@previous.update_attributes(notes:
"There is a meeting in this room on #{self.day} at #{self.begin_time.strftime("%I:%M%P")}")
end
unless @next.nil?
set_linked_task_id(@next)
self.notes = "There is a meeting in this room on #{@next.day} at # {@next.begin_time.strftime("%I:%M%P")}"
end
end
def prev?
@prev = Task.for_day(self.day).for_room(self.room)
.with_gear(self.gear)
.where('begin_time < ?', self.begin_time).last
if @prev.nil?
@prev = Task.for_day(self.day.yesterday).for_room(self.room)
.with_gear(self.gear).last
return @prev unless @prev.nil?
end
@prev
end
def next?
@next = Task.for_day(self.day).for_room(self.room)
.with_gear(self.gear)
.where('begin_time > ?', self.begin_time).first
if @next.nil?
@next = Task.for_day(self.day.tomorrow).for_room(self.room)
.with_gear(self.gear).first
return @next unless @next.nil?
end
@next
end
def set_linked_task_id(task)
#@linked_task_id = task.id
end
end
私のように他のモデル インスタンスを更新する必要があるかどうかはわかりません。他のインスタンスを更新するクラス メソッドを作成する必要がありますか? インスタンス間の関係を作成する必要がありますか?
また、コードに重複があることも認識しています。しかし、最初にコンセプトを正しく実行したかっただけです。
編集 明確にするために、前の?メソッドが機能していません。