2015-08-05 2 views
3

Моя Рельсы задача выглядит следующим образом:rake aborted! ArgumentError: неверное число аргументов (2 для 0..1)

desc 'Delete records older than 7 days' 
    task :delete_old_records => :environment do 
    Post.delete_all('created_at < ?', 7.days.ago) 
    end 

Я пытался выполнить задачу с помощью:

rake delete_old_records --trace 

и это приводит к этому ошибка:

** Invoke delete_old_records (first_time)                                                        
** Invoke environment (first_time)                                                          
** Execute environment                                                             
** Execute delete_old_records                                                           
rake aborted!                                                               
ArgumentError: wrong number of arguments (2 for 0..1)                                                     
/home/codio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/activerecord-4.2.0/lib/active_record/relation.rb:453:in `delete_all'                                  
/home/codio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/activerecord-4.2.0/lib/active_record/querying.rb:8:in `delete_all'                                   
/home/codio/workspace/lib/tasks/delete_old_records.rake:3:in `block in <top (required)>'                                            
/home/codio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rake-10.4.2/lib/rake/task.rb:240:in `call'                                         
/home/codio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rake-10.4.2/lib/rake/task.rb:240:in `block in execute'                                      
/home/codio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rake-10.4.2/lib/rake/task.rb:235:in `each'                                         
/home/codio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rake-10.4.2/lib/rake/task.rb:235:in `execute'                                        
/home/codio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rake-10.4.2/lib/rake/task.rb:179:in `block in invoke_with_call_chain'                                  
/home/codio/.rbenv/versions/2.1.5/lib/ruby/2.1.0/monitor.rb:211:in `mon_synchronize'                                             
/home/codio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rake-10.4.2/lib/rake/task.rb:172:in `invoke_with_call_chain'                                    
/home/codio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rake-10.4.2/lib/rake/task.rb:165:in `invoke'                                        
/home/codio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rake-10.4.2/lib/rake/application.rb:150:in `invoke_task'                                     
/home/codio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rake-10.4.2/lib/rake/application.rb:106:in `block (2 levels) in top_level'                                 
/home/codio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rake-10.4.2/lib/rake/application.rb:106:in `each'                                       
/home/codio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rake-10.4.2/lib/rake/application.rb:106:in `block in top_level'                                    
/home/codio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rake-10.4.2/lib/rake/application.rb:115:in `run_with_threads'                                    
/home/codio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rake-10.4.2/lib/rake/application.rb:100:in `top_level'                                      
/home/codio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rake-10.4.2/lib/rake/application.rb:78:in `block in run'                                     
/home/codio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rake-10.4.2/lib/rake/application.rb:176:in `standard_exception_handling'                                 
/home/codio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rake-10.4.2/lib/rake/application.rb:75:in `run'                                        
/home/codio/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/rake-10.4.2/bin/rake:33:in `<top (required)>'                                        
/home/codio/.rbenv/versions/2.1.5/bin/rake:23:in `load'                                                    
/home/codio/.rbenv/versions/2.1.5/bin/rake:23:in `<main>'  

Кто-нибудь знает, что я могу делать неправильно здесь? Моя модель выглядит следующим образом:

class Post < ActiveRecord::Base 
end 

и грабли-самоцвет версия грабли 10.4.2

ответ

0

Попробуйте

Post.delete_all(['created_at < ?', 7.days.ago]) 
+0

Спасибо Naiyyar. Это сработало! Можете ли вы пролить свет на то, почему квадратные скобки сделали все возможное? –

+0

delete_all принимает 0 или 1 аргумент, так как ваше сообщение об ошибке показывает «ArgumentError: неправильное количество аргументов (2 для 0..1)», в вашем случае он рассматривает «created_at Anna88

1

Вы могли бы сделать что-то вроде этого:

timestamp = Time.now - 7.days 
posts = Post.where('created_at < ?', timestamp) 
posts.each { |post| post.destroy } 

7.days.ago возвращает класс ActiveSupport :: TimeWithZone.

Time.now - 7.days вернет объект Time, который вам нужен.

Или вы могли бы дать этому выстрел:

posts = Post.where('created_at < ?', timestamp).destroy_all 

Не совсем уверен, что сломал на своем конце, но его работы для меня в моей консоли, используя базовую модель Rails.

+0

все еще получаю ту же ошибку :. ------------------------------------------ desc 'Удалить записи старше 7 дней ' Задача: delete_old_records =>: environment do timestamp = Time.now - 7.days Post.delete_all (' created_at

+1

Отредактированный ответ. Это работает на моей машине. –

+0

Не совсем уверен, что сломал delete_all. Я обновил ответ другим возможным решением. Если это не сработает, вам придется жить с повторением результатов. FWIW, я использовал похожий код и не имел проблем, особенно с задачей, которая работает только 1-2 раза в день. –

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