在多个模型中,我需要检查两组日期是否重叠,所以我写了以下方法:
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#`,所以不确定发生了什么...
谢谢!
答案 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
该类现在可以访问模块中定义的方法。将模块包含在需要共享方法的任何类中。
模块是一种很好的方法,可以根据关注的区域分离共享方法(在这种情况下,使用日期)。