From 5e7df7753a671eb55fd2929064cbec0b1390e38f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B1=E5=8D=9A=E4=BA=9E?= Date: Thu, 18 Nov 2021 15:07:34 +0800 Subject: [PATCH] fix error --- app/models/bulletin.rb | 5 +++-- app/models/bulletin_feed.rb | 12 +++++++++--- app/models/bulletin_feed_cache.rb | 2 +- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/app/models/bulletin.rb b/app/models/bulletin.rb index 12c847f..f4a8439 100644 --- a/app/models/bulletin.rb +++ b/app/models/bulletin.rb @@ -85,7 +85,8 @@ class Bulletin before_destroy :destroy_email scope :open_in_future, ->{where(:is_hidden.ne=>true,:is_preview.ne => true,:postdate.gt=>Time.now).order(postdate: :asc)} - scope :can_display_and_sorted, ->{where(:is_hidden.ne=>true,:is_preview.ne => true).any_of({:postdate.lte=>Time.now, :deadline.gte=>Time.now},{:postdate.lte=>Time.now, :deadline=>nil},{:postdate=>nil,:deadline.gte=>Time.now},{:postdate=>nil,:deadline=>nil}).order(is_top: :desc,postdate: :desc,id: :desc)} + scope :can_display_and_sorted, ->{where(:approved => true,:is_hidden.ne=>true,:is_preview.ne => true).valid_time_range} + scope :valid_time_range, ->{any_of({:postdate.lte=>Time.now, :deadline.gte=>Time.now},{:postdate.lte=>Time.now, :deadline=>nil},{:postdate=>nil,:deadline.gte=>Time.now},{:postdate=>nil,:deadline=>nil}).order(is_top: :desc,postdate: :desc,id: :desc)} scope :is_approved, ->{where(:approved => true)} scope :is_approved_and_show, ->{where(:approved => true,:is_hidden.ne=>true,:is_preview.ne => true)} scope :filter_cats_and_tags, ->(cats,tags) {filter_by_widget_categories(cats,false).filter_by_tags(tags)} @@ -93,7 +94,7 @@ class Bulletin before_save :check_limit index({postdate: 1}, { unique: false, background: true }) index({is_top: -1,postdate: -1, _id: -1}, { unique: false, background: true }) - index({is_hidden: 1,is_preview: 1, is_top: -1,postdate: -1,_id: -1,deadline: -1}, { unique: false, background: true }) + index({approved: -1,is_hidden: 1,is_preview: 1, is_top: -1,postdate: -1,_id: -1,deadline: -1}, { unique: false, background: true }) def get_org_model if self.is_preview org_model = nil diff --git a/app/models/bulletin_feed.rb b/app/models/bulletin_feed.rb index 4ed8c7a..c7d6943 100644 --- a/app/models/bulletin_feed.rb +++ b/app/models/bulletin_feed.rb @@ -59,7 +59,8 @@ class BulletinFeed tags = bf.tag_ids categories = bf.category_ids if !(categories.empty? && tags.empty?) - anns_before_filter = Bulletin.any_of(I18n.available_locales.map{|v| {"title.#{v}"=>{"$nin"=>["", nil]}}}).is_approved_and_show + anns_before_filter = Bulletin.is_approved_and_show + can_display_and_sorted_flag = false if !dt.nil? dt = DateTime.parse(dt) dtt = dt + 1.day @@ -72,15 +73,20 @@ class BulletinFeed startdt = DateTime.parse(startdt) enddt = DateTime.parse(enddt) + 1.day anns_before_filter = anns_before_filter.where(:postdate.gt => startdt, :postdate.lt => enddt) + else + can_display_and_sorted_flag = true end - anns_before_filter = anns_before_filter.can_display_and_sorted + if !tags.empty? anns_before_filter = anns_before_filter.filter_by_tags(tags) end if !categories.empty? anns_before_filter = anns_before_filter.filter_by_categories(categories) end - announcements = anns_before_filter.can_display_and_sorted + anns_before_filter.selector = {"$and"=>[anns_before_filter.selector,{"$or"=>(I18n.available_locales.map{|v| {"title.#{v}"=>{"$nin"=>["", nil]}}})}]} + if can_display_and_sorted_flag + announcements = anns_before_filter.valid_time_range + end else announcements = [] end diff --git a/app/models/bulletin_feed_cache.rb b/app/models/bulletin_feed_cache.rb index 6260884..2982e2d 100644 --- a/app/models/bulletin_feed_cache.rb +++ b/app/models/bulletin_feed_cache.rb @@ -23,7 +23,7 @@ class BulletinFeedCache et = self.end dt = self.date uid = self.uid - BulletinFeed.where(uid: uid).first.generate_one_cache(startdt: st,enddt: et,dt: dt) rescue nil + BulletinFeed.where(uid: uid).each{|v| v.generate_one_cache(startdt: st,enddt: et,dt: dt)} rescue nil self.destroy end end \ No newline at end of file