2015-12-07 37 views
-1

獲取過去48小時內更新的所有會議。獲取最近2天更新的會議

我必須從3個表中考慮updated_at,並考慮哪些是最近更新的。

會議屬於房間。

會議將有多個邀請。

如果在過去48小時內3個模型(會議室,邀請)中的任何一個發生變化,我需要取得會議。

關係::

Class Meeting 
    has_many :invites 
    belongs_to :room 
end 

Class Room 
    has_many :meetings 
end 

Class Invite 
    has_many :meetings 
end 

注:: 我不需要從邀請任何數據,房,我需要考慮只的updated_at進行比較。

回答

0

我認爲你在尋找:touch參數activerecord關係。你可以試試這個:

Class Room 
    # touch is true will update meeting whenever the room is updated 
    has_many :meetings, touch: true 
end 

Class Invite 
    # touch is true will update the meetings whenever the invite is updated 
    has_many :meetings, touch: true 
end 

你可以閱讀here瞭解更多細節。請記住搜索:touch

更新: 如果您不想在更新相關記錄時更新會議。您可以手動查詢所有邀請,會議室和會議並從中收集會議記錄。類似這樣的:

new_invites = Invite.includes(:meetings).where("updated_at >= ?", Time.zone.now - 48.hours) 
new_rooms = Room.includes(:meetings).where("updated_at >= ?", Time.zone.now - 48.hours) 
new_meetings = Meeting.where("updated_at >= ?", Time.zone.now - 48.hours) 

collected_meetings = new_invites.map(&:meetings).flatten + new_rooms.map(&:meetings).flatten + new_meetings 
result = collected_meetings.uniq { |m| m.id } 
+0

我不想在有空間或邀請更改時更新會議。我想通過查詢獲取。 –

+0

然後,我認爲您需要獲取所有會議室,邀請您在過去48小時內更新的會議,然後從中收集會議。我會爲此更新我的答案。 – vutran