2016-06-20 3 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 

イベントテーブルが含まれています選択イベントテーブルに属し

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

トレーニングテーブルには、私は、次を満たすイベントのみを含む配列を作成したい

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

が含まれています条件:

event.date + training.update_frequency> Date.now

これは、 "延滞"イベントを持つ配列を作成します。

説明を助ける:たとえば、「基本的な生活支援」トレーニングにはupdate_frequency = 365があります。つまり、毎年行う必要があります。私は、実行された日付+年がDate.nowより大きい "延滞"イベントを選択したいと思います。

ご迷惑をおかけして申し訳ありません。

答えて

0

日にちに変換する必要がある整数列があるため、データベースクエリでこれを行うことはできません。あなたはこのような何か行うことができます:

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

を...それはあなたのコレクションが育つような方法が遅くますかなり非効率的な操作です。

+0

上記を実行して、その規定を満たすすべてのイベントの配列を返すことは可能ですか? – jameslagan

+0

あなたはそのコードを試しましたか? – jmschles

関連する問題