我不知道这是我实现的准确而简单的方法。我有两个模型。模态“ A”属于模态“ B”,而“ B”具有许多模态“ A”。我在模型B中有一个日期字段“到期日期”。
现在我要列出记录模态“ A”。该列表应按升序排列,并关联其模式“ B”的最后记录到期日期和今天的日期。我计算了日期差,但仍然困惑于订购它。
diff = (f.bill_histories.last.ndate.to_date - DateTime.now.to_date).to_i
我尝试过并用Google搜索它,但仍然没有找到建议。请建议我。
答案 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")