如何基于参加一般事件和基于用户参加活动的日期来显示帖子

时间:2014-09-27 06:06:15

标签: ruby-on-rails

让我们说1月1日至1月31日是一个名为Musiczilla的音乐节。

用户可以参加活动并指定他们将在那里的日期

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

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

所以

  • 如果user1发布了一般事件帖子,例如“别忘了带票”,那么参加活动的所有用户都应该看到它。
  • 如果user1发布了一个特定的活动帖子,比如“谁想在Musiczilla上喝啤酒?”。只有那些在一天或多天才能访问user1的人应该看到它(在这种情况下只有user1和user2,而不是user3)。
  • 同样,如果user2发布了“谁想要喝啤酒?”,那么user1,user2和user3应该会看到它。

在我的模型和控制器中处理此问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

这是一个快速尝试:

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

查询有点难看。