我有一个应用程序,其中总是有一个当前的比赛(由 start_date 和 end_date 日期时间定义)。我在 application_controller.rb 中有以下代码作为 before_filter。
def load_contest
@contest_last = Contest.last
@contest_last.present? ? @contest_leftover = (@contest_last.end_date.utc - Time.now.utc).to_i : @contest_leftover = 0
if @contest_last.nil?
Contest.create(:start_date => Time.now.utc, :end_date => Time.now.utc + 10.minutes)
elsif @contest_leftover < 0
@winner = Organization.order('votes_count DESC').first
@contest_last.update_attributes!(:organization_id => @winner.id, :winner_votes => @winner.votes_count) if @winner.present?
Organization.update_all(:votes_count => 0)
Contest.create(:start_date => @contest_last.end_date.utc, :end_date => Time.now.utc + 10.minutes)
end
end
我的问题:
1)我想将 :end_date 更改为表示下周日某个时间的内容(例如下周日晚上 8 点)。同样,我可以在某个时间将 :start_date 设置为上一个星期日。我看到有一个 sunday() 类(http://api.rubyonrails.org/classes/Time.html#method-i-sunday),但不确定如何指定当天的某个时间。
2)对于这种总是想要当前比赛的情况,有没有更好的方法在应用程序中加载它?如果创建一个新的,缓存它会更好然后重新加载吗?不知道如何做到这一点,但似乎更有效率。
谢谢!