所以我有三个模特。用户,患者和日历日。用户和许多患者和患者可以有很多日历日。
我想做的是为一个用户提取病人,并在日历日按列排序。
db中的表通常会设置如何在rails中使用ActiveRecord用于在模型中关联的ID(并且关联设置正确)。
示例:用户bob@example.com有4名患者(Tom,John,Sally和Jane)。每位患者都有今天和昨天的日历日(每个日期的日历日是唯一的)。
我想拉出所有四名患者并按今天的created_by日期排序(日期列实际上是一个日期时间字段,实际上是按今天的时间排序)。
我一直在尝试像@patients = user.patients.order(.join(:calendar_days).order(“date DESC”)),但我不知道如何创建和ActiveRecord查询先进。
我认为我之前没有像这样设置过复杂的查询。
答案 0 :(得分:1)
@jizak几乎拥有它,但你想限制它使用当前的日历日期。您可以使用类方法来简化这一过程:
class Patient < ActiveRecord::Base
has_many :calendar_days
def self.for_date(date)
joins(:calendar_days).where('DATE(calendar_days.created_at) = ?', date)
end
end
user.patients.for_date(Date.today).order('calendar_days.created_at DESC')
请注意'DATE(...)'
条件中使用的where
函数是MySQL和SQLite特有的,不适用于PostgreSQL或Oracle - 它们还有其他方法可以做同样的事情。
答案 1 :(得分:0)
你可以这样做
u.patients.joins(:calendar_days).order('calendar_days.created_at DESC')
或者您可以将.select添加到特定字段
u.patients.joins(:days).select('patients.*, days.name as days_name').order('days.created_at ASC')