2016-06-20 12 views
0
class User < ActiveRecord::Base 
    has_many :events 
    has_many :trainings, -> { distinct }, through: :events 
end 

class Event < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :training 
end 

class Training < ActiveRecord::Base 
    has_many :events 
    has_many :user, -> { distinct }, through: :events 
end 

Ereignistabelle enthält:Wählen Ereignisse basierend auf Kriterien in gehört zur Tabelle

t.date  "date" 
t.integer "user_id" 
t.integer "training_id" 

Trainings Tabelle

t.text  "name" 
t.integer "update_frequency" 

enthält Ich möchte ein Array erstellen, die nur Ereignisse enthält, die die folgenden Merkmale erfüllen, Zustand:

event.date + training.update_frequency> Datum.now

Dadurch wird ein Array mit "überfälligen" Ereignissen erstellt.

Um zu erklären: Zum Beispiel sagen "Basic Life Support" Training hat update_frequency = 365 - d. H. Es sollte jährlich erfolgen. Ich möchte "überfällige" Ereignisse auswählen, bei denen das Datum dort angegeben wurde + ein Jahr ist größer als Date.now.

Alle Gedanken würden dankbar erhalten werden!

Antwort

0

Ich bin nicht sicher, dass Sie dies mit einer Datenbankabfrage tun können, weil Sie eine Integerspalte haben, die in Tage übersetzt werden muss. Man könnte so etwas tun:

Event.all.select do |e| 
    (e.date + e.training.update_frequency.days) < Date.today 
end 

... aber das ist ein ziemlich ineffizienter Betrieb, die Art und Weise langsam werden sie wie Ihre Sammlungen wachsen.

+0

Es ist möglich, das obige zu tun und ein Array aller Ereignisse zurückzugeben, die diese Bedingung erfüllen? – jameslagan

+0

Haben Sie diesen Code ausprobiert? – jmschles

Verwandte Themen