ruby-on-rails - 我该怎么做呢? Model.where ("created_at >= #{Time.now - 5.days}")

标签 ruby-on-rails activerecord rails-activerecord

这一直困扰着我一段时间...

如何字符串插值 datetime在 Rails ActiveRecord 查询中?

# Works, but supeh ugleh:
Model.where("created_at >= ?", Time.now - 5.days)

# How do I do this?
Model.where("created_at >= #{Time.now - 5.days}")
# As is, it produces the following error message:
# ActiveRecord::StatementInvalid: PG::Error: ERROR:  syntax error at or near ...

我关心的原因是代码可读性:
# I like this better:
Model.where("created_at >= #{Time.now - 5.days} OR" + \
            "updated_at >= #{Time.now - 3.days}")

# than this:
Model.where("created_at >= ? OR updated_at >= ?", Time.now - 5.days, Time.now - 3.days)

最佳答案

老问题,但我最喜欢的方法是:

Model.where(created_at: 5.days.ago..Time.current)

更漂亮,更具可读性。

另外,Rails 3.2 introduced一些 Active Support 辅助方法来获取一些常用范围,Time#all_day , Time#all_week , Time#all_quarterTime#all_year ,因此您可以例如执行以下操作:
Model.where(created_at: Time.current.all_week)

关于ruby-on-rails - 我该怎么做呢? Model.where ("created_at >= #{Time.now - 5.days}"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9748082/

相关文章:

ruby-on-rails - 使用相同的操作来显示所有(索引)对象,同时还显示由 url 参数限定范围的列表

ruby-on-rails - 使用 SemanticLogger gem 在 Rails 控制台中显示 SQL ActiveRecord 查询

ruby-on-rails - Rails 模型验证条件 allow_nil?

ruby-on-rails - 使用delete_all/delete删除rails事件记录违反了外键约束

ruby-on-rails - Rails 会自动优化查询吗

ruby-on-rails - Rails rake 数据库 :migration do not recognise new migrates

ruby-on-rails - Rails 三种开发模式的区别

ruby-on-rails - 如何在邮寄方法的邮寄布局中包含条件?

ruby-on-rails - ActionMailer在文本邮件程序中未显示空格

ruby-on-rails - rails : Bundler could not find compatible versions for gem "actionpack" on installing ActiveAdmin