Имеется приложение Rails 3 со следующими моделями:
# == Schema Information
# Schema version: 20110517144920
#
# Table name: orders
#
# id :integer not null, primary key
# user_id :integer not null
# name :string(255) not null
# state :string(255)
# created_at :datetime
# updated_at :datetime
#
class Order < ActiveRecord::Base
belongs_to :user
has_many :multipage_pdfs, :as => :assetable, :dependent => :destroy
has_many :singlepage_pdfs, :as => :assetable, :dependent => :destroy
...
end
# == Schema Information
# Schema version: 20110511064747
#
# Table name: assets
#
# id :integer not null, primary key
# assetable_id :integer not null
# assetable_type :string(255) not null
# state :string(255)
# type :string(255) not null
# name :string(255) not null
# document :string(255) not null
# version :integer default(0), not null
# created_at :datetime
# updated_at :datetime
#
class Asset < ActiveRecord::Base
...
end
class SinglepagePdf < Asset
...
end
версия актива # увеличивается при каждом создании нового актива, если актив с идентичным именем существует, поэтому мои активы обычно выглядят (упрощенно):
| id | assetable_id | assetable_type | name | version | type |
| 1 | 1 | Order | my.pdf | 1 | SinglepagePdf |
| 2 | 1 | Order | my.pdf | 2 | SinglepagePdf |
| 3 | 1 | Order | my.pdf | 3 | SinglepagePdf |
| 4 | 1 | Order | bla.pdf | 1 | SinglepagePdf |
Теперь мне нужно получить все singlepage_pdfs одного заказа, но только последнюю версию для каждого имени. Как мне этого добиться?
o = Order.find(1)
singlepage_pdfs = o.singlepage_pdfs.find(...)
Результат должен содержать только активы с идентификаторами 3 и 4 ...