2014-01-05 2 views
0

Я работаю над графическим приложением Sinatra. Я определил модели Datamapper для своих пользователей, загруженные изображения и «Favs». Каждый пользователь может предоставить максимум один «Fav» для каждого изображения.Datamapper: count favs

class User 
    include DataMapper::Resource 
    property :id, Serial 
    property :privilege_lvl, Integer, :default => 0 
    property :name, String, :unique => true 
    property :password_hash, BCryptHash 
    has n, :images 
    has n, :comments 
    has n, :favs 
end 

class Image 
    include DataMapper::Resource 
    property :id, Serial 
    mount_uploader :file, ImageUploader 
    belongs_to :user 
    property :posted_at, DateTime 
    has n, :comments 
    has n, :favs 
end 

class Fav 
    include DataMapper::Resource 
    property :id, Serial 
    belongs_to :image 
    belongs_to :user 
end 

Есть ли способ подсчитать общее количество Favs пользователь получил без перебора всех изображений пользователя и суммируя FAVS каждого изображения?

ответ

0

Похоже, вам нужен кэш счетчика:

Это может быть столь же просто, как добавление :favs_cache пользователей и увеличивая его каждый раз, когда добавляется Favs.

Вы также можете проверить этот драгоценный камень: dm-counter-cache

+0

Хорошо, я думал, что, может быть, я мог бы бесчестно использовать запрос DataMapper для достижения означая. –