سؤال

لدي نموذج قضبان يجب أن يسمح فقط بحفظ / تحديث نموذج مرة واحدة يوميا لكل مستخدم. لدي رد فعل اتصال للقيام بالجدود من قبل المستخدم والتاريخ، ثم أضف إلى أخطاء ولكن هذا قبيح ويشعر به الأمر. لدي الأعمدة النموذجية التي تم إنشاؤها / Update_at (والجزء الزمني مهم / أحتاج للحفاظ عليه).

لذلك أنا الرقم يمكنني إما:

1) قم بإنشاء سمة نموذجية أخرى هي مجرد تاريخ الإبداع والنطاق من خلال ذلك (BLEH)

2) استخدام: سمة النطاق: فقط احصل فقط على جزء التاريخ من CRIMIT_AT، على سبيل المثال Validates_Uniqueness_Of: User،: Scope =>: create_at.to_date (لا يعمل، من الواضح)

3) التحقق من صحة ما لم => proc.new {| o | Finder الذي يطابق اتصالي الحالي} (إجمالي)

http://ar.rubyonrails.org/classes/activerecord/validations/classmethods.html#m000086.

لن يكون هناك عدد ساحق من هذه، ولكنني أفضل أنه يتم ذلك في SQL بدلا من روبي (لأسباب متوسطة واضحة).

أي أفكار؟ هل هناك طريقة أفضل؟

هل كانت مفيدة؟

المحلول

يمكنك أيضا كتابة طريقة التحقق الخاصة بك. هذا هو تماما سهل. وبعد وفي طريقة التحقق من صحة مخصصة، date_trunc. (postgresql) يمكن استخدامها للعثور على السجلات الموجودة في الفترة الزمنية المطلوبة. date_trung يمكن أيضا الحصول على paintrond (eGhour، اليوم، الأسبوع، الشهر).

بدلا من date_trung يمكن استخدام حالة بسيطة للعثور على سجل متعارض. على سبيل المثال،

نصائح أخرى

انتهى بي الأمر باستخدام conditions الخيار مع validates_uniqueness_of وتمريرها Lambda التي تحد من السجلات التي تم التحقق منها إلى تلك التي لهذا اليوم.

class AttendanceRecord < ActiveRecord::Base
  validates_uniqueness_of :user_id, conditions: { -> { where("DATE(created_at) = ?", Date.today) } }
end
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top