是否有红宝石/铁轨宝石,使范围日期容易

时间:2011-08-24 19:05:43

标签: ruby-on-rails ruby date gem

任何人都知道一个宝石可以使范围日期变得容易吗?我喜欢做Model.this_year(:created_at).where()......等等。我以为我听过一次。

我在想dues_paid_this_year或updated_at_two_hours_ago。通过创建动态范围可以像search_logic这样做的宝石会让我的世界变得可爱

2 个答案:

答案 0 :(得分:2)

我不知道有什么宝石 - 虽然创造它会很酷。话虽如此,这可能会让你:

class Thing < ActiveRecord::Base
  # Some date-related scopes
  scope :today, where("created_at > ?", Time.now.beginning_of_day)
  scope :yesterday, where("created_at < ? and created_at > ?", 1.day.ago.end_of_day, 1.day.ago.beginning_of_day)
  scope :this_month, where("created_at > ?", Time.now.beginning_of_month)
  scope :last_month, where("created_at < ? and created_at > ?", 1.month.ago.end_of_month, 1.month.ago.beginning_of_month)
  scope :this_year, where("created_at > ?", Time.now.beginning_of_year)
  ### 
  # All your model stuff goes here
  ###

  # Let's get real tricky with method_missing 
  # and allow Thing.last_X_days for work for any value of X
  private

  def self.method_missing(method, *args, &block) 
    if method.to_s =~  /^last_(\d+)_days$/i
      days = method.to_s.match(/^last_(\d+)_days$/i)
      return self.where("created_at > ?", days[1].to_i.days.ago.beginning_of_day)
    else
      super
    end
  end   

end

这将为您提供一些基本的范围,例如Thing.this_month ...以及一个动态查找器,它可以让您执行类似Thing.last_90_days的操作并适用于任何数字(警告:我有点像method_missing n00b,代码对我有用,但也许有人可以仔细检查它)。

仅供参考我在这里假设Rails 3。

答案 1 :(得分:0)

你不能用lambda示波器做你想做的事吗?