我使用Rails 3.1,MySQL和3類工作:計算機,LifecycleStatus & LifecycleEntry如何獲取連接表中的最新條目?
我想跟蹤計算機的LifecycleStatus的歷史隨着時間的推移所以LifecycleEntry的欄目有:COMPUTER_ID:整數,lifecycle_status_id:整數和changed_at:datetime。計算機可以在LifecycleStatus中有多個條目。
我已成立了以下關聯:
Computer
has_many :lifecycle_entries, :order => "changed_at DESC"
has_many :lifecycle_statuses, :through => :lifecycle_entries
LifecycleEntry
belongs_to :computer
belongs_to :lifecycle_status
LifecycleStatus
has_many :lifecycle_entries
我想看到的,對於特定的LifecycleStatus,哪些計算機當前分配給該狀態(他們最近lifecycle_entries記錄)。
我已經成功地創建正確的SQL來獲取此信息,但我不知道如何將此轉化爲一個Rails的關聯:如果你非規範化
SELECT id, le.computer_id, lifecycle_status_id
FROM lifecycle_entries AS le
INNER JOIN (
SELECT lemax.computer_id, MAX(changed_at) AS latest
FROM lifecycle_entries AS lemax
GROUP BY lemax.computer_id
) maxdates
ON le.changed_at = maxdates.latest
AND le.computer_id = maxdates.computer_id
WHERE lifecycle_status_id = 6
我想我也可以在計算機模型中有一個lifecycle_status_id列,並在LifecycleEntry上有一個after_create/update回調函數來更新計算機中的列? – 2012-02-16 22:14:48
所以你建議在LifecycleEntry中添加一個active:boolean列,當創建一個新條目時,我將它設置爲true,並以某種方式僞造該計算機的所有其他條目? – 2012-02-16 22:17:15
您只需要僞造一個條目中的「活動」狀態,當您的更新操作開始時您就可以處理它。 lifecycle_entry.computer.active_entry – bdon 2012-02-16 22:21:38