ActiveRecord,has_many:通过,但仅限于最新版本

时间:2013-11-12 19:47:34

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

所以我有以下(简化)架构

用户有很多订阅 订阅具有开始和停止(日期),以及引用(belongs_to)出版物 出版物有id和名字 用户通过订阅has_many出版物

用户可能会对具有不同日期的发布进行多次订阅。

我想要的是为每个酒吧获取一个用户订阅列表,但只列出最近的订阅,而不是将来的订阅。

因此,在订阅中给出以下行:

ID | user_id | start      | stop      | publication_id
1  | 1       | 2013-01-01 | 2013-12-01| 1
2  | 1       | 2014-01-01 | 2014-12-31| 1
3  | 1       | 2011-01-01 | 2011-12-31| 1
4  | 1       | 2013-01-01 | 2013-02-01| 2

将返回表示ID 1和4的对象。

1 个答案:

答案 0 :(得分:0)

这对你有用吗?

在您的用户模型中

def current_subscriptions
  self.subscriptions.where("start < ? AND stop >= ?", Date.today, Date.today)
end

因此,对于@ user.current_subscriptions,它会查询他们的订阅以查找今天之前开始的任何内容,并且不会停止到今天或之后,这将删除ID为2和3的对象并返回ID为1和4的对象。

此外,如果您想使用Date.today代表今天的日期,请在您的用户模型中加入Active Support