带日期的条件活动模型序列化器

问题描述

我需要做一个条件,以使日期小于当前日期的事件不会显示在JSON中,而只能看到即将发生的事件。

class EventSerializer < ActiveModel::Serializer
  attributes :end_date

  def end_date
    date_to_show = object.stop || (object.start + 1.day).beginning_of_day
    object.museum.time_zone ? ActiveSupport::TimeZone[object.match.time_zone].local_to_utc(date_to_show) : date_to_show
  end

class FeedSerializer < ActiveModel::Serializer
  
  has_many :events,if: -> { upcoming_event },serializer: EventSerializer
 

  def upcoming_event
    ???
  end

  
end

解决方法

创建一个自定义关联,以仅基于日期过滤将来的事件,并在序列化程序中使用它。

在Feed模型中,您将获得类似下面的内容以及实际的关联。

  has_many :events,if: -> { upcoming_event },serializer: EventSerializer
  has_many :future_events,-> { where(date < Date.today) },class_name: 'Event' # Change the name,conditions as per your requirement.

并在供稿序列化器中访问自定义关联,

class FeedSerializer < ActiveModel::Serializer
  
  has_many :future_events
 
end