2013-01-15 47 views
0

所以我有三种模式。用户,患者和日历天。用户和有许多患者和患者可以有许多日历天。通过关联有效记录排序

我想要做的是拉病人为一个用户和排序在日历天列。

在数据库中的表是设置通常你会怎么办它与IDS的轨道是ActiveRecord的使用在模型关联(和协会都设置正确)。

示例:用户[email protected]有4例(汤姆,约翰,萨利,和Jane)。每位患者今天和昨天都有一个日历日(每个日期的日历日是独一无二的)。

我想拉所有4名患者和排序当今CREATED_BY日期(日期列是一个真正的日期时间字段,这实在是今天的时间排序)。我一直在尝试一起像@patients = user.patients.order(.join(:calendar_days).order(“date DESC”)),但我不知道如何创建和ActiveRecord查询那先进。

我不认为我以前有生以来设置一个复杂的查询是这样的。

回答

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

注意的是,在where条件下使用的'DATE(...)'功能的MySQL和SQLite具体的,不会对PostgreSQL或Oracle的工作 - 他们做的其他方式一样。

0

你可以这样做

u.patients.joins(:calendar_days).order('calendar_days.created_at DESC') 

也可以添加。选择到fecth具体领域

u.patients.joins(:days).select('patients.*, days.name as days_name').order('days.created_at ASC') 
+0

奏效通过日期命令他们,但我不得不感谢jizak修改它有点 – bach942

相关问题