2009-07-07 8 views
30

ActiveRecordモデルを繰り返し処理し、処理を行い、再度モデルを保存するプロセスがあります。ただし、処理によって属性が変更されることはなく、updated_at列は決して変更されません(saveが呼び出されても)。Rails 2.3.2の "Touch" updated_atカラム

部分的な更新を無効にしたくない(一般的には便利です)。これは、冗長/ビット無駄なようだが、モデルに別のタイムスタンプ列を追加します(つまり、「processed_at」)とこれを自分で管理する

  1. :私は私の二つの選択肢があるに推測しています。
  2. updated_at属性の管理を何とかオーバーライドしますか?

私は、Rails 3には私が探しているものと同じような 'touch'メソッドがあると聞いてきました。

アイデア、オプション、意見はありますか?

答えて

52

実はtouch方法はRailsの2.3.x以降ではすでにあるので、あなたは、単に行うことができます。

model.touch 

updated_at列を更新します。また、現在の日付と時刻を使用していくつかの他の列に更新する:今すぐ2.3.x以降のラインが来てしまったことを

model.touch(:column_name) 
+0

うわー!あなたが正しい。レッスンで学んだことは、あなたがブログ記事(http://ryandaigle.com/articles/2009/4/20/what-s-new-in-edge-rails-touching)で読むすべてを信じてはいけません。ソース(http://github.com/rails/rails/blob/0d3c5f0a822cd1b6029b5f619774b7794a94f370/activerecord/lib/active_record/timestamp.rb#L27) – ideasasylum

+0

私はDHHがTwitterでこれを言及している可能性があると思っています。 –

+0

Grrr ...タッチサポートが2.3.2リリースを逃したばかりで、2.3-STABLEブランチにしかないように見えます。 2.3.3マイルストーンはありませんが、7月18日には2.3.4が掲載されています。私はちょうど待つ必要があると思う:-( – ideasasylum

1

を、より決定的な答えは、タッチが2.3.8までのActiveRecordにそれをしなかったということです。だから、Rails 2.3.2をまだ使っている人は(OPがあった - そして私が現在行っているように)レコードに「触れる」別の方法を見つける必要があるでしょう。

関連する問題