簡體   English   中英

通過關聯對Active Record進行排序

[英]Active Record sorting based through an association

所以我有三種模式。 用戶,患者和日歷天。 用戶並且有很多患者,並且患者可以有很多日歷日。

我想做的是為一個用戶吸引患者,並在日歷天中按列進行排序。

db中的表通常是按照在ActiveRecord用來在模型中關聯的ID的方式在Rails中進行設置的(並且關聯已正確設置)。

示例:用戶bob@example.com有4位患者(Tom,John,Sally和Jane)。 每個患者都有今天和昨天的日歷天(每個日期的日歷天都是唯一的)。

我想拉所有四個患者並按今天的created_by日期排序(date列實際上是datetime字段,它實際上是按今天的時間排序)。

我一直在嘗試像@ Patients = user.patients.order(.join(:calendar_days).order(“ date DESC”))這樣的東西,但是我不確定如何創建和改進ActiveRecord查詢。

我認為我以前從未設置過像這樣的復雜查詢。

@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')

請注意, where條件中使用的'DATE(...)'函數是特定於MySQL和SQLite的,不適用於PostgreSQL或Oracle-它們具有執行相同操作的其他方式。

你可以這樣

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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM