2016-04-02 21 views
-1

i aşağıdaki koduRaylar 4.2 geçerli bir kod ya da değil mi?

def self.activate_lessons 
i = 0 
#for lesson in Lesson.to_activate 
for lesson in Lesson.find :all, :conditions => ["start_date < ? AND (active <> ? OR active IS NULL)", DateTime.now, true] 
    lesson.active = true 
    lesson.save 
    i += 1 
    end 
    i 
end 

bu vaild raylar 4.2 kodudur ya da değil var? Amacınız etkinleştirilmiş ders sayısını dersleri etkinleştirmek ve geri dönmek için ise

ActiveRecord::RecordNotFound: Couldn't find all Lessons with 'id': (all, {:conditions=>["start_date < ? AND (active <> ? OR active IS NULL)", Sat, 02 Apr 2016 09:50:06 +0000, true]}) (found 0 results, but was looking for 2) 

cevap

1

deneyin gibi yapabilirsiniz:

bu hata var Bu kodu kullanma:

Lesson.where("start_date < ? AND active = ?", DateTime.now,Nil).update_all(active: true) 
+0

ile bu hatayı kolayca değerlendirebiliriz: sözdizimi hatası, beklenmedik' \ n ', bekleniyor :: veya' ['or'. ' – Felix

+0

benim hatamdı üzgünüm. Ama şimdi bu hatayı aldım: NameError: başlatılmamış sabit Ders: Nil – Felix

+0

herhangi bir fikri neden sıfır değil? – Felix

2

bu

def self.activate_lessons 
Lesson.where.not(active: true).where("start_date < ?", DateTime.now).update_all(active: true) 
end 

find(:first) and find(:all) support is removed from rails 3.2+.

+0

Bu tam olarak eşit değil onaylama/geri aramalar çağrılmayacağından dolayı ödendi. –

+0

Nesneleri somutlaştırması gereken validasyonları/geri çağrıları çağırmak için haklısınız (bu arada pahalı bir işlemdir), fakat "doğru" değeri açıkça belirtildiği için model doğrulamalarının burada gerekli olacağını sanmıyorum ve İşlemden sonra her zaman aranan çağrıyı her zaman tetikler. –

+0

Kim bilir - 'if: active? ' –

İlgili konular