`

Rails中使用好named_scope与时间区间

阅读更多
在我最近的工作中,由于要做数据统计,与时间区间打交道非常多,如统计这个月的销售量之类的。
Message.find(:all, :conditions => {:created_at => Time.now.beginning_of_month..Time.end_of_month})

对于爱美的程序员来说,这看起来不养眼,也不符合DRY精神。写成这种形式感觉 怎么样呢:
Message.in(:this_month) # 在一个named_scope中


来看看是如何做到这么DSLful的吧!

在config/initializer目录中创建timeranges.rb文件,如下:
# timeranges.rb
TimeRanges = {
  :today      => lambda { Time.now.beginning_of_day..Time.now.end_of_day },
  :yesterday  => lambda { 1.day.ago.beginning_of_day..1.day.ago.end_of_day },
  :this_week  => lambda { Time.now.beginning_of_week..Time.now.end_of_week },
  :last_week  => lambda { 1.week.ago.beginning_of_week..1.week.ago.end_of_week},
  :this_month => lambda { Time.now.beginning_of_month..Time.now.end_of_month },
  :last_month => lambda { 1.month.ago.beginning_of_month..1.month.ago.end_of_month }
}


在Model中创建一个名为in的named_scope:
class Message < ActiveRecord::Base
  named_scope :in, lambda { |period| 
      :conditions => {:created_at => TimeRanges[period].call}
  }
end


一个字,爽!

参考:http://workswithruby.com/2009/2/application-wide-timeranges-3
分享到:
评论
4 楼 jayliud 2009-10-30  
看到kungfurails有类似的代码
class Message < ActiveRecord::Base
  named_scope :in, lambda { |period| 
      :conditions => {:created_at => 
         case period
         when 'today': Time.now.beginning_of_day..Time.now.end_of_day
         when 'yesterday ': 1.day.ago.beginning_of_day..1.day.ago.end_of_day
         end
   }
  }
end
3 楼 jayliud 2009-10-30  
class Message < ActiveRecord::Base
  named_scope :in, lambda { |period| 
      :conditions => {:created_at => 


   }
  }
end


2 楼 elele 2009-08-04  
1 楼 ssyangy 2009-07-20  

相关推荐

    RestFul_Rails_Dev_pdf_v_0.1.zip

    本资料“RestFul_Rails_Dev_pdf_v_0.1.zip”包含了《RESTful Rails Development》的翻译版,将深入探讨如何在Rails中实现RESTful的设计模式。 首先,RESTful设计的核心概念是资源(Resources)。在Rails中,资源...

    Rails_3_Cheat_Sheets.pdf

    Rails_3_Cheat_Sheets.pdf

    Ruby on Rails: the scope method

    # 在控制器中使用scope class CatsController def index @cats = Cat.all @tabby_cats = Cat.tabby @kitten_cats = Cat.kitten end end ``` #### `has_scope` Gem 除了在模型中定义`scope`之外,还可以使用`...

    rails_admin_acts_as_list:rails_admin插件以对记录进行排序

    介绍插件,用于对记录进行排序(使用 gem)安装要启用rails_admin_acts_as_list,请将以下内容添加到您的Gemfile : gem 'rails_admin_acts_as_list'gem 'rails_admin' 重要提示: rails_admin_acts_as_list之前必须...

    Rails_Recipes_with_Source_Code

    2. **模型(Models)**:Rails中的模型负责与数据库交互,使用ActiveRecord进行数据操作。书中可能会涵盖ActiveRecord的基本用法,如创建、读取、更新和删除(CRUD)操作,关联关系(如属主、多对多等),以及验证...

    IkaGame示例。使用 Rails5 ActionCable_ruby_代码_下载

    ActionCable是Rails5中内置的WebSocket库,它将WebSockets的复杂性封装起来,提供了一种与Rails应用程序的其他部分无缝集成的方式。ActionCable的核心组成部分包括: 1. **Connection**: 连接管理,负责建立和维护...

    Rails101_by_rails4.0

    Git作为版本控制系统,对于团队协作开发项目尤为重要,学习它的使用方法能够帮助开发者更好地管理代码的版本。而在Rails开发中,合适的编辑器可以提高代码编写和管理的效率,Linux命令行则对于部署和维护开发环境...

    用于过滤英文脏话的 Rails 插件 gem_Ruby_代码_相关文件_下载

    在Rails应用中使用`profanity_filter`的步骤大致如下: 1. **安装 gem**:首先,在你的Rails项目的`Gemfile`中添加`gem 'profanity_filter'`,然后运行`bundle install`命令来安装。 2. **配置**:在你的Rails应用...

    rails_admin_image_manager:RailsAdmin和CKEditor的图像管理器

    RailsAdmin_ImageManager RailsAdmin和CKEditor的图像管理器。...$ rails db:migrate SCOPE=rails_admin_image_manager 安装图像管理器CKEditor插件 mkdir -p app/assets/javascripts/ckeditor && touch app

    rails_admin_content_builder:使用rails_admin创建内容的简单方法

    gem 'rails_admin_content_builder' 运行生成器并进行迁移 rails g rails_admin_content_builder rake db:migrate 在app / assets / application.scss中添加样式 * = require rails_admin_content_builder 用法 ...

    张文钿 Rails Best Practices 幻灯片

    ### 张文钿 Rails 最佳实践分享概览 在一次重要的技术分享会上,台湾著名的Rails开发者张文钿(ihower)向...随着更多开发者加入到这个项目中来,相信`rails_best_practices`将会成为Rails社区中不可或缺的一部分。

    Agile Web Development with Rails 1-14节_ppt(老师发的修正版)

    Agile Web Development with Rails 1-14节_ppt(老师发的修正版)

    Complex Rails system_Rails_优化_

    3. **进程管理**:使用如Unicorn或Puma这样的Web服务器,它们能更好地管理Rails进程,提高并发能力。 五、资产管道优化 1. **合并CSS和JS**:使用Rails的Asset Pipeline合并文件,减少HTTP请求。 2. **压缩资产**...

    rails_model_test_hello_world

    自述文件版本和设置$ ruby -vruby 2.6.1p33 (2019-01-30 revision 66950) [x86_64-darwin18]$ rails -... $ rails new rails_model_test_hello_world -T -m ~/rtfb_template.rb$ cd rails_model_test_hello_world$ rail

    从图像 生成 Bootstrap配色方案的 Rails 应用程序_css_ruby_html_代码_下载

    标题中的“从图像生成Bootstrap配色方案的Rails应用程序”是一个基于Ruby on Rails的Web应用,它的主要功能是根据用户上传的图像自动生成匹配的Bootstrap配色方案。Bootstrap是一款流行的前端开发框架,它提供了丰富...

    在Rails中使用SSL

    在Rails中使用SSL(安全套接层)是构建Web应用时确保数据传输安全的重要步骤。Rails框架支持在应用程序中轻松集成SSL,以保护用户敏感信息,如登录凭据和支付详情。以下是一些关于在Rails中实施SSL的关键知识点: 1...

    rails_admin_history_rollback:使用paper_trail的rails_admin的历史记录回滚

    安装要启用rails_admin_history_rollback ,请将以下内容添加到您的Gemfile确保将其添加到rails_admin之后: gem 'rails_admin'gem 'rails_admin_history_rollback' 不用说,此插件还需要paper_trail gem。...

    rails_admin_become_user:以设计用户身份登录的 Rails Admin 插件

    Rails 管理员成为用户 Rails Admin 插件成为主应用程序中的设计用户 概述 在对用户问题进行故障排除时,从... 在您的config/initializers/rails_admin.rb初始化程序中添加配置: RailsAdmin . config do | config |

    plug_rails_cookie_session_store:与Rails兼容的插件会话存储

    标题中的"plug_rails_cookie_session_store"是一个针对Rails框架的会话存储插件,它旨在在Elixir的Phoenix框架中实现与Rails相兼容的会话管理。这个插件的目的是让那些从Rails迁移到Elixir Phoenix的应用程序能够...

    awesome-rails-gem-zh_CN, Rails 常用 Gem 列表 - Awesome Rails Gem 中文版.zip

    Rails,全称Ruby on Rails,是一款基于Ruby语言的开源Web应用程序框架,以其“Don't Repeat Yourself”(DRY)和...在使用这些Gem时,记得阅读其文档,了解使用方法和注意事项,以便更好地融入到自己的项目中。

Global site tag (gtag.js) - Google Analytics