1

序文: 私は初心者です。

これは昨日解決したと思っていましたが、このドメイン用に適切に設計されたモデルがあるかどうかさえ疑問に思っています。

私は(自分の仕事に基づいて)タスクアプリを作成しています。これは私の 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

私のように他のモデル インスタンスを更新する必要があるかどうかはわかりません。他のインスタンスを更新するクラス メソッドを作成する必要がありますか? インスタンス間の関係を作成する必要がありますか?

また、コードに重複があることも認識しています。しかし、最初にコンセプトを正しく実行したかっただけです。

編集 明確にするために、前の?メソッドが機能していません。

4

0 に答える 0