在我们的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是一个日期时间。我们的代码出了什么问题?非常感谢。
答案 0 :(得分:1)
尝试:
SysLog.where("log_date < ?", SysLog.all[num_entry -1].log_date).delete_all
正确引用你的约会。
但考虑修改。我想你可以用这种方式获取你的num_entry-1元素:
SysLog.offset(num_entry-1).first
比获取所有这些更有效率。