У меня есть что-то вроде структуры:
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')
Это возвращает одну лицензию для каждого ключа, но первая, которая требуется, определяется 'id', , а не в порядке, указанном в запросе.
Есть ли способ, которым я могу заставить его дать мне первое из каждого, используя порядок сортировки, который я предоставляю, чтобы решить, какой из них является первым?