2011-10-19 5 views
0

で配列を保存するトラブルを抱えています:このアプローチは、私のコードの別の部分で働いてますが、何らかの理由でエラーメッセージが、そこではありません私はRailsの2.2.2アプリのコントローラで

@reminders = Reminder.find(:all, :conditions => ["group_id = ? and remind_at < ?", g.id, @three_days_ago]) 
@reminders.each do |r| 
    r.remind_at = DateTime.now 
end 

@reminders.each(&:save!) 
p "*** test ***" 

データは保存されません。アトリビュートアクセス可能な問題ではありません。テストメッセージはコンソールに出力されているため、プロセスはコードのその部分をスキップしません。私の構文は正しいですか?

+1

#remind_atを設定した後に 'r.save!'を追加すると動作しますか? – Ben

+2

はよく見えますが、なぜ@ reminders.each do | r | r.update_attribute(:remind_at、DateTime.now) end – chrispanda

答えて

1

これはうまくいくはずですが、これは非常に効率的な方法ではありません。潜在的には、大量のリマインダがあり、ロードするために複数のGBのメモリが必要になる可能性があります。何ものでもallを取得することは、本質的に危険です。

より良い解決策はちょうどそれを行うためのデータベースを得ることです:

Reminder.update_all(:remind_at => Time.now) 

でも大きなテーブルの上に、この操作はかなり迅速に完了すべきであると荷重を必要としない、調整、各モデルの検証と保存します。

+0

申し訳ありません。私は物事を単純なものにしようとしていたが、条件をステートメントに入れておくべきだった。すべてのレコードが更新を受け取るわけではありません。私の間違い。 – Jay

+0

良いニュースは、 'update_all'には適用される条件である2番目の引数があることです。新しいバージョンのRailsでは、 'where'を使って事前にスコープを設定することもできます。 – tadman

関連する問題