如何定义跨应用程序可用的辅助方法

时间:2014-07-19 01:17:47

标签: ruby-on-rails ruby-on-rails-4 methods

在多个模型中,我需要检查两组日期是否重叠,所以我写了以下方法:

def do_dates_overlap(second_record)
  test = ((self.pickupdate - second_record.returndate) * (second_record.pickupdate - self.returndate)).to_i
  if test > 0
    return "yes"
  elsif test == 0
    return "edge"
  elsif test < 0
    return "no"
  end
end

但是我不知道在哪里放这个以便它可以在多个模型中使用。顺便说一句,现在我在Request模型中需要它,但当我把它放在Request模型中时:

class Request < ActiveRecord::Base

    def do_dates_overlap(second_record)
    ....
    end

end

然后在控制台作为测试运行Request.last.do_dates_overlap(Request.first),我收到错误:NoMethodError: undefined method do_dates_overlap'for#`,所以不确定发生了什么...

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以将模块用于此行为。

在app / models / concerns /中创建一个新模块(即datecheck.rb)

module Datecheck
  def do_dates_overlap(second_record)
    test = ((self.pickupdate - second_record.returndate) * (second_record.pickupdate - self.returndate)).to_i
    if test > 0
      return "yes"
    elsif test == 0
      return "edge"
    elsif test < 0
      return "no"
    end
  end
end

在你班上:

class Request
  include Datecheck
end

该类现在可以访问模块中定义的方法。将模块包含在需要共享方法的任何类中。

模块是一种很好的方法,可以根据关注的区域分离共享方法(在这种情况下,使用日期)。