mysql - 比较日期时间不起作用

标签 mysql ruby-on-rails datetime

我正在创建一个使用 MySQL 的 Rails 应用程序。我的数据库中有一个这样的表:

  create_table "pastes", :force => true do |t|
    t.string   "title"
    t.text     "body"
    t.string   "syntax"
    t.boolean  "private"
    t.datetime "expire"
    t.string   "password"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

我只想向人们显示未过期的 pastes,所以我这样做:

@pastes = Paste.find(:all, :conditions => "expire < '#{Time.now.to_s(:db)}'")

但是,即使这样也会返回 ALL pastes 。不仅仅是那些尚未过期的。谁能帮我?谢谢

哦,将 < 更改为 > 不会返回 pastes ,甚至不会返回未过期的:(

最佳答案

我将在您的粘贴模型中创建一个命名范围:

class Paste < ActiveRecord::Base
  named_scope :expired, lambda {
    { :conditions => ["expire < ?", Time.zone.now] }
  }
end

Rails 3 版本:

class Paste < ActiveRecord::Base
  scope :expired, lambda {
    where("expire < ?", Time.zone.now)
  }
end

请注意,lambda 需要延迟 Time.zone.now 的计算,直到实际调用(命名)作用域时为止。否则,将使用评估类(class)的时间。

现在您可以通过简单的操作获取所有过期的粘贴:

@pastes = Paste.expired

——很干净,是吧?

关于mysql - 比较日期时间不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2705514/

相关文章:

mysql - 如何以相反的顺序编写 Laravel 查询

mysql - 使用 Mariaex.Result 结构中的字段

python - 计算耗时

python - pandas 数据框滚动窗口中的最大日期

ruby-on-rails - EventMachine 和 Ruby 线程——这里到底发生了什么?

java - 使用 HIbernate 从数据库检索日期时获取错误的日期时间字段值

php - 使用多个表上的多个查询从多个表中获取数据

php - 在没有目标 ="_blank"的新页面中提交表单

ruby-on-rails - 这些 Ruby 版本 : 中存在 `heroku' 命令

ruby-on-rails - 未定义方法 `content_length' 对于 nil :NilClass fog storage [carrierwave]