【发布时间】:2013-12-26 03:55:50
【问题描述】:
我刚刚开始学习使用 Rails,并且在 Django 方面拥有丰富的经验。我正在尝试将一个相当常见的查询转换为 Rails ORM,但似乎找不到对独立于数据库的解决方案的良好参考。
我想要做的是将 created_at 字段的日期或月份与从 url 提交的文本进行比较。在 Django 中,这很简单:
if kwargs.get('year', False):
# Filter by year
post_list = Post.objects.filter(posting_date__year = kwargs['year'])
# Futher filter by month if applicable
if kwargs.get('month', False):
post_list = post_list.filter(posting_date__month=kwargs['month'])
我似乎无法在 Rails 中找到一个简单的数据库独立解决方案来做同样的事情。请注意,我强调 数据库独立 部分;我当然可以为此编写自己的 SQL,但我坚信代码和数据库的抽象。
【问题讨论】:
-
rails activerecord/activerelation (ORM) 是围绕 sql 的“泄漏”抽象,您应该能够保持“数据库独立”,但您会经常使用 sql sn-ps,即
Post.where("title LIKE ?", "#{params[:title_search]}%").order(:title)- as要过滤日期时间列,您可能需要阅读我在时区上所做的这篇博文 - jessehouse.com/blog/2013/11/15/… - 取决于您希望结果的准确程度
标签: sql ruby-on-rails date orm