需要干掉我的佣金任务

时间:2012-09-07 06:43:36

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

基本上我正在运行rake任务来更新rails 3 app中的“notes”字段。目前我的任务设置如下:

desc "Update notes"
  task :get_notes => :environment do
      Product.find(:all, :conditions => ["categories like ?", "%" + '123456' + "%"]).each do |product|
      old_note = product.notes
      notes = old_note + ", <new note>"
      product.update_attribute(:notes, notes)
    end

问题是我有大约250个独特的类别要更新250个独特的笔记,所以我基本上只是在我的任务中复制了250多次。我怎样才能更有效地完成这项工作? (这只是一次性的事情,但我想知道如何更好地为未来的问题做这件事。)

2 个答案:

答案 0 :(得分:2)

取此:How to pass command line arguments to a rake task

task :get_notes, [:category] => :environment do |t, args|
  Product.find(:all, :conditions => ["categories like ?", "%#{args[:category]}%"]).each do |product|
  old_note = product.notes
  notes = old_note + ", <new note>"
  product.update_attribute(:notes, notes)
end

以:rake get_notes[123456]

运行

答案 1 :(得分:0)

我最终只创建了一个函数:

  def add_note(category, note)
    Product.find(:all, :conditions => ["categories like ?", "%" + category + "%"]).each do |product|
    old_note = product.notes
    if old_note != nil
    notes = old_note + note
  else notes = note
  end
    product.update_attribute(:notes, notes)
  end
end

并且只使用每个唯一变量调用函数:

desc "Update note"
  task :get_notes => :environment do
    add_note('7818797', "<note>")
end
end