0

基本上我正在运行一个 rake 任务来更新我的 rails 3 应用程序中的“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 多次。我怎样才能更有效地做到这一点?(这只是一次性的事情,但我想知道如何更好地解决诸如此类的未来问题)。

4

2 回答 2

2

拿这个:如何将命令行参数传递给 rake 任务

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]

于 2012-09-07T07:26:21.447 回答
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
于 2012-09-07T18:04:03.380 回答