基本上我正在运行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多次。我怎样才能更有效地完成这项工作? (这只是一次性的事情,但我想知道如何更好地为未来的问题做这件事。)
答案 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