0

在我们的 rails 3.1.4 应用程序中,系统日志中过多的条目将使用 sys_log 模型中的方法删除:

  def self.trim_log(num_entry)
    if SysLog.count > num_entry      
      SysLog.where("log_date < #{SysLog.all[num_entry -1].log_date}").delete_all
    end
  end

这里的 num_entry 是我们要保留的日志条目。该条目之前的任何条目都将被删除。但是 delete_all 在 rspec 中导致以下错误:

 ←[31mFailure/Error:←[0m ←[31mSysLog.trim_log(1)←[0m
 ←[31mActiveRecord::StatementInvalid:←[0m
   ←[31mSQLite3::SQLException: near "03": syntax error: DELETE FROM "sys_logs" WHERE (log_date < 2012-06-10 03:43:21 UTC)←[0m

Rails 控制台中的错误是相同的。我们开发的数据库是sqlite3。log_date 是日期时间。我们的代码有什么问题?非常感谢。

4

1 回答 1

1

尝试:

SysLog.where("log_date < ?", SysLog.all[num_entry -1].log_date).delete_all

正确引用您的日期。

但考虑修改。我想你可以通过这种方式获取你的第 num_entry-1 个元素:

SysLog.offset(num_entry-1).first

这比获取所有这些要高效得多。

于 2012-06-10T15:48:37.577 回答