订单模型按其has_many模型的日期差

时间:2018-09-17 08:11:01

标签: ruby-on-rails ruby date

我不知道这是我实现的准确而简单的方法。我有两个模型。模态“ A”属于模态“ B”,而“ B”具有许多模态“ A”。我在模型B中有一个日期字段“到期日期”。

现在我要列出记录模态“ A”。该列表应按升序排列,并关联其模式“ B”的最后记录到期日期和今天的日期。我计算了日期差,但仍然困惑于订购它。

diff = (f.bill_histories.last.ndate.to_date - DateTime.now.to_date).to_i

我尝试过并用Google搜索它,但仍然没有找到建议。请建议我。

2 个答案:

答案 0 :(得分:0)

假设:

class Foo < ActiveRecord::Base
  belongs_to :bar
end

class Bar < ActiveRecord::Base
  has_many :foos
end

您应该能够使用Bar s表上的join语句在数据库级别进行排序:

Foo.joins(:bar).order(bars: { expired_at: :desc })

说明:

  

升序,其相关模式“ B”的最后记录有效日期和今天的日期不同

这意味着最新日期应该在第一位,因此简单的ORDER BY expired_at DESC应该可以满足您的需求。

join是必需的,因此您可以使用Bar的{​​{1}}列。

访问联接表的属性需要使用expired_at方法中的哈希语法。

答案 1 :(得分:0)

检查差异Time.zone.now - model_b_object.expiry_date是不必要的步骤。只需直接转到订购部分。这将显示过期的B型记录,最接近今天的日期。

ModelB.all.order("expiry_date ASC")