我有一個結構是這樣的:Rails的活動記錄:找到會同:訂單和:
class User
has_many :dongles
has_many :licences, :through => :dongles
end
class Dongle
has_many :licences
belongs_to :user
end
class Licence
belongs_to :dongle
end
然而,時間的推移和用戶最終獲得多份許可證爲每個適配器。合理的,該應用程序想要總結每個最新的許可證。
我知道我能天真地做這樣的:
user.dongles.each do |dongle|
licence = dongle.licences.find(:first, :order => 'created_at DESC')
# do something with the licence info
end
但是,有沒有辦法通過收集來做到這一點,避免了大量的查詢,這通常通過做它用簡單的方式造成的?
我嘗試這樣做:
user.licences.find(:all, :order => 'created_at DESC', :group => 'dongle_id')
這確實返回一個許可證爲每個加密狗,但第一個需要被「身份證」決定,不由順序我已經在查詢中指定。
有沒有一種方法,我可以把它給我的第一各自的,使用排序我提供,以決定這是第一個?
這是一件好事,因爲它確實減少了查詢的數量,而該代碼是不是從我已經有了很大的不同(這是反正更可讀。) – Trejkaz 2009-07-17 06:48:22