İlgili Kod: http://pastebin.com/EnLJUJ8GRaylar 3: Bir nesneyi sonradan bir geri aramada açıkça kaydetmeliyim mi?
class Task < ActiveRecord::Base
after_create :check_room_schedule
...
scope :for_date, lambda { |date| where(day: date) }
scope :for_room, lambda { |room| where(room: room) }
scope :room_stats, lambda { |room| where(room: room) }
scope :gear_stats, lambda { |gear| where(gear: gear) }
def check_room_schedule
@tasks = Task.for_date(self.day).for_room(self.room).list_in_asc_order
@self_position = @tasks.index(self)
if @tasks.length <= 2
if @self_position == 0
self.notes = "There is another meeting in
this room beginning at # {@tasks[1].begin.strftime("%I:%M%P")}."
self.save
end
end
end
private
def self.list_in_asc_order
order('begin asc')
end
end
Ben küçük bir görev app yapıyorum. Her görev bir odaya atanır. Bir görev ekledikten sonra, eklediğim görevden önce ve sonra aynı odada görevler olup olmadığını kontrol etmek için bir geri arama kullanmak istiyorum (kodum sadece şu anda bir kenar durumu ele alsa da).
Bu yüzden after_create'i kullanmaya karar verdim (kullanıcı bunu düzenlediklerinde bunu manuel olarak kontrol edecek, dolayısıyla after_save yapamayacaktır), böylece o gün, odadaki görevleri sorgulamak için iki kapsam ve bir sınıf yöntemini kullanabilirdim ve bunları zamana göre sıralayın. Ardından dizideki nesneyi bulup ifadeler kullanıp kullanmaya başladım.
Nesneyi açıkça kaydetmem gerekiyor. İşe yarıyor. Ama bunu yapmam garip geliyor. Ben çok deneyimli (ilk uygulama) değilim, bu yüzden bu çatık olup olmadığından emin değilim ya da kongre ise. Bir demet aradım ve bir referans kitabını inceledim, ancak bu özel bir şey görmedim.
Teşekkürler.
kapsamları yük olmaz beri artık ne psuedo kodunda
, Bu nesne (veya bu konuda yanlış mıyım?), bu nesneyi el ile @tasks dizisine eklemem gerekiyor, düzeltilsin mi? – douglas
Düzenlememe bakın. Kaydetmeden önce sorgunuzun 2 veya daha fazla nesne döndürüp döndürmediğini görmek yerine, kaydetmeden önce temel olarak 1 çakışma olup olmadığını kontrol edin. –
Veritabanında bir kaydın kontrol edilmesi ActiveRecord bulucu metodu var "?" Kullanılmalıdır. [Active Record API Dock] 'a bakın (http://apidock.com/rails/ActiveRecord/FinderMethods/exists%3F) – unnu