Ruby on rails 如何根据一般情况下参加活动以及用户参加活动的日期显示帖子

Ruby on rails 如何根据一般情况下参加活动以及用户参加活动的日期显示帖子,ruby-on-rails,Ruby On Rails,比如说,从1月1日到1月31日有一个名为Musiczilla的音乐节 用户可以参加活动并指定他们将出席的日期 帖子可以是关于一般事件的,也可以是关于帖子用户在特定时间出现的 user1将于1月1日至7日参加活动 user2将于1月5日至13日参加该活动 user3将于1月8日至15日参加该活动 所以 如果user1发布了一篇一般性的活动帖子,比如别忘了带票,那么所有参加活动的用户都应该看到它。 如果user1发布了一个特定的事件帖子,比如谁想在Musiczilla喝杯啤酒?。只有那些在user1

比如说,从1月1日到1月31日有一个名为Musiczilla的音乐节

用户可以参加活动并指定他们将出席的日期

帖子可以是关于一般事件的,也可以是关于帖子用户在特定时间出现的

user1将于1月1日至7日参加活动 user2将于1月5日至13日参加该活动 user3将于1月8日至15日参加该活动 所以

如果user1发布了一篇一般性的活动帖子,比如别忘了带票,那么所有参加活动的用户都应该看到它。 如果user1发布了一个特定的事件帖子,比如谁想在Musiczilla喝杯啤酒?。只有那些在user1所在的一天或几天内会在那里的人才能看到user1和user2,而不是user3。 同样,如果user2发布了谁想喝啤酒的帖子,那么user1、user2和user3应该会看到。
在我的模型和控制器中处理此问题的最佳方法是什么?

下面是一个快速尝试:

class Post
  attr_accessible :general
  belongs_to :event, :user

  def self.visible_to_user(viewing_user)
    joins(:user).
    where(general: true).
    where(
      "(general = false AND (users.start_date <= ?) AND (users.end_date >= ?)) OR general = true", 
      viewing_user.end_date, 
      viewing_user.start_date
    )
  end
end

class User
  attr_accessible :start_date, :end_date
end

class Event
  attr_accessible :start_date, :end_date
end

不过查询有点难看。

用户是否可以在不连续的日期范围内参加,例如1月1日至3日和10日?是的,但我可能会将其结构为用户的两个独立事件记录。这听起来相当随意。什么把一篇文章分为一般的还是具体的?该帖子是否针对特定的一天?帖子作者会选择帖子是一般事件帖子还是特定于他们在事件中的时间,目前我有一个表行用于事件\一般:布尔。您如何存储出席日期?