Rails实例变量基于时间?

Con*_*nor 2 ruby ruby-on-rails

快问.如果我有一个Model,比如Charities,它有一个start_date和一个end_date属性,我怎样才能将它设置current_charity为Controller中的方法?

我知道我必须做某种事情Charities.find(params[:something]),并且必须将其设置为current_charity等于start_date> =当前日期,以及谁end_date是<=当前日期(一次只有一个"当前"日期) ).我通常只是通过参数[:id]找到一个模型,所以这对我来说是新的.

谢谢!

Thi*_*ilo 5

在模型中添加范围方法:

def self.current
  now = Time.now
  where("start_date <= ? AND ? <= end_date", now, now).first
end
Run Code Online (Sandbox Code Playgroud)

然后在你的控制器中:

current_charity = Charity.current
Run Code Online (Sandbox Code Playgroud)

  • 我比Thilo的答案更好.但一定要写很多单元测试!基于时间的逻辑非常棘手,很容易错过边缘情况.您可以使用"模拟时钟"测试时间 - 在RSpec中,您可以执行类似`Time.stub!(:now).and_return {Time.parse("2010-01-01 12:00")}`来欺骗你的代码认为这是另一天. (4认同)