0

基本的には、rake タスクを実行して、Rails 3 アプリの「メモ」フィールドを更新しています。現在、次のようにタスクを設定しています。

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 回以上コピーしただけです。どうすればこれをより効率的に達成できますか? (これは 1 回限りのことですが、今後このような問題が発生した場合に備えて、より適切に行う方法を知りたいと思います)。

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 に答える