获取最近2天更新的会议

时间:2015-12-07 02:20:53

标签: ruby ruby-on-rails-4 activerecord

获取过去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进行比较。

1 个答案:

答案 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 }