【问题标题】:ActiveRecord, has_many :through, but only on newestActiveRecord, has_many :through,但只在最新的
【发布时间】:2013-11-12 19:47:33
【问题描述】:

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

用户有很多订阅 订阅有开始和结束(日期),引用(belongs_to)出版物 出版物有一个 id 和一个名字 用户通过订阅拥有_many 个出版物

一个用户可能有多个订阅,但日期不同。

我想要的是获取用户的订阅列表,但只有最近的,而不是未来的,每个 pub。

所以在订阅中给出以下行:

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 的对象。

【问题讨论】:

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


    【解决方案1】:

    这对你有用吗?

    在您的用户模型中

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-03
      • 2010-12-13
      • 2018-05-07
      • 1970-01-01
      • 2018-09-02
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多