获取过去48小时内更新的所有会议。
我必须从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 :(得分: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 }