Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 我的模型设计是否正确?_Ruby On Rails_Activerecord_Models - Fatal编程技术网

Ruby on rails 我的模型设计是否正确?

Ruby on rails 我的模型设计是否正确?,ruby-on-rails,activerecord,models,Ruby On Rails,Activerecord,Models,前言:我是个新手 我想我昨天已经解决了这个问题,但我开始怀疑我是否有一个适合这个领域的设计模型 我正在创建一个任务应用程序(基于我的工作)。这是我的第二次尝试(第一次尝试时,我没有做任何测试,设计也很糟糕,尽管它可以工作)。基本上,我希望添加具有日期、开始和结束时间、档位(即LCD投影仪)等的任务。创建任务时,我希望查看当天(或前一天)是否存在具有相同房间/档位的前一个任务,并使用说明(:notes是一列)更新前一个任务,说明任务稍后在房间中。我还想检查是否有具有相同房间/设备的下一个任务,并想

前言:我是个新手

我想我昨天已经解决了这个问题,但我开始怀疑我是否有一个适合这个领域的设计模型

我正在创建一个任务应用程序(基于我的工作)。这是我的第二次尝试(第一次尝试时,我没有做任何测试,设计也很糟糕,尽管它可以工作)。基本上,我希望添加具有日期、开始和结束时间、档位(即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
类任务?',self.begin\u time)。首先
如果@next.nil?
@下一步=任务。为天(self.day.明天)。为房间(self.room)
.带自动档(自动档)。第一
返回@next,除非@next.nil?
结束
@下一个
结束
def设置链接任务id(任务)
#@链接的任务id=task.id
结束
结束
我不确定是否应该像现在这样更新其他模型实例。我应该创建一个类方法来更新其他实例吗?我应该在实例之间创建关系吗

我还意识到代码中存在重复。但我只是想先把概念做好

编辑
澄清一下,只有上一个?方法不起作用。

欢迎使用Rails!如果你能试着问一些更具体的问题,你会有更好的机会得到答案。也许不要把这样一个大的问题放在这样的问题上,你可以考虑把这个问题分解成几个小问题,比如:如何最好地在Rails中创建下一个/以前的记录方法?你更有可能找到现有的文章来帮助你搜索,这也很公平。但当我说“我不确定我是否应该像现在这样更新其他模型实例。我应该创建一个类方法来更新其他实例吗?我应该在实例之间创建一个关系吗?”时,这就是我要说的。非常感谢。