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 に答える