0

所以我有三个模型。用户、患者和日历日。用户并拥有许多患者,患者可以拥有许多日历日。

我想做的是为一个用户拉病人,并在日历日内按列排序。

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 查询。

我认为我以前从未设置过这样的复杂查询。

4

2 回答 2

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 - 他们有其他方法可以做同样的事情。

于 2013-01-15T22:51:40.303 回答
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')
于 2013-01-15T22:13:32.577 回答