2012-06-10 2 views
0

В наших рельсах 3.1.4 приложения, чрезмерное количество записей в системном журнале будет удален с помощью метода в sys_log модели:ActiveRecord :: StatementInvalid вызванные delete_all

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 - это дата-время. Что не так с нашим кодом? Спасибо.

ответ

1

Try:

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

правильно процитировать вашу дату.

Но рассмотрите вопрос о пересмотре. Я думаю, вы можете получить ваш num_entry-1'th элемент таким образом:

SysLog.offset(num_entry-1).first 

, который является гораздо более эффективным, то выборка всех из них.

+0

работает отлично. Спасибо. – user938363

Смежные вопросы