2016-06-27 7 views
0

複数のレーキタスクを1つのタスクで実行しようとしています。 すべてのレーキタスクは、それぞれのテーブルの列を更新するために使用されます。たとえば については health_post_id場合> 100000 私はここで ていることに把握することはできませんよ.But、そのレコードを削除しますRuby on Railsのrakeタスクへの引数の受け渡し

今私は、コマンドラインから引数として100000を渡す必要がありますが、コード

if Rails.env.development? or Rails.env.test? 
namespace :clear_data do 


    desc 'clear time slots' 
    task :clear_time_slots => :environment do 
    TimeSlot.where('health_post_id > ?', p).each do |time_slots| 
     time_slots.destroy 
    end 
    end 

    desc "Clean the Practices table" 
    task :clear_practice_records => :environment do 
     Practice.where('health_post_id > ?', p).each do |practices| 
     practices.destroy 
     end 
    end 


    desc "clean database" 
    task :clear_database => :environment do |p| 
    Rake::Task['clear_data:clear_practice_records'].execute 
    Rake::Task['clear_data:clear_time_slots'].execute 


    end 



end 
end 
+3

可能な複製(http://stackoverflow.com/ [どのように私はrakeタスクにコマンドライン引数を渡すのですか?]質問/ 825 748/how-do-i-pass-command-line-arguments-rake-task) –

+0

初心者にとっては簡単だったと思っています –

+0

誰かが助けてくれる人 –

答えて

1
です

私はわからないんだけど、私はあなたが行うことができるはず推測:の

if Rails.env.development? or Rails.env.test? 
namespace :clear_data do 
    desc 'clear time slots' 
    task :clear_time_slots, [:post_id] => :environment do |_, args| 
    TimeSlot.where('health_post_id > ?', args[:post_id]).destroy_all 
    end 

    desc "Clean the Practices table" 
    task :clear_practice_records, [:post_id] => :environment do |_, args| 
    Practice.where('health_post_id > ?', args[:post_id]).destroy_all 
    end 


    desc "clean database" 
    task :clear_database, [:post_id] => :environment do |_, args| 
    max = args[:post_id] 
    Rake::Task['clear_data:clear_practice_records'].execute(post_id: max) 
    Rake::Task['clear_data:clear_time_slots'].execute(post_id: max) 

    #OR 

    #Rake::Task['clear_data:clear_practice_records'].invoke(max) 
    #Rake::Task['clear_data:clear_time_slots'].invoke(max) 
    end 
end 
end 
+0

ありがとうoreoluwa –

関連する問題