1

ユーザーごとに 1 日 1 回だけモデルの保存/更新を許可する必要がある Rails モデルがあります。ユーザーと日付で検索してエラーに追加するコールバックがありますが、これは見苦しく、レールに似ていません。私は典型的な created_at / updated_at 列を持っています (そして時間部分は重要です/それを維持する必要があります)。

だから私はどちらかができると思います:

1)作成日とそれによる範囲だけの別のモデル属性を作成します(bleh)

2) :scope 属性を使用しますが、どうにかして created_at の日付部分だけを取得します。

3) => Proc.new{ |o| でない限り検証します。既存のコールバックに一致するファインダー } (グロス)

http://ar.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html#M000086

これらの数が圧倒的に多いわけではありませんが、Ruby ではなく SQL で実行することをお勧めします (明らかなスケーラビリティの理由から)。

何かご意見は?より良い方法はありますか?

4

2 に答える 2

1

独自の validates メソッドを作成することもできます。これは非常に簡単です。また、カスタム検証メソッドでは、date_trunc (Postgresql) を使用して、必要な期間内に既存のレコードを見つけることができます。date_trunc はパラメータ化することもできます (例: 時間、日、週、月)。

date_trunc の代わりに、単純な条件を使用して競合するレコードを見つけることができます。例 ["user_id = ? AND updated_at >= ?", self.user_id, Time.now.beginning_of_day] インデックスを使用できるため、このレコードの検索はより高速になるはずです。

于 2009-09-30T20:10:24.503 に答える