2014-11-08 3 views
0

Я делаю Instagram-подобный клон, где пользователи загружают фотографии, на которые проголосовали.Использование пользовательских методов в области/рефакторинг настраиваемых методов

Как я могу реорганизовать этот код? Как я могу по умолчанию использовать его, уменьшая процент?

class Picture < ActiveRecord::Base 
    mount_uploader :picture, PictureUploader 
    has_and_belongs_to_many :tags 
    has_many :votes, :dependent => :destroy 

    def vote_count 
     return self.votes.count 
    end 

    def up_votes 
     return self.votes.where('up like ?', true).count.to_f 
    end 

    def down_votes 
     return self.votes.where('up like ?', false).count.to_f 
    end 

    def percent 
     return self.up_votes/self.vote_count 
    end 

end 

FYI моя Голосуйте модель просто отслеживает изображение и идентификатор пользователя и имеет до: логическое значение,: по умолчанию => ложный

Все это кажется менее кратким, чем это может быть, как бы вы написать это лучше?

ответ

0
class Picture < ActiveRecord::Base 
    mount_uploader :picture, PictureUploader 
    has_and_belongs_to_many :tags 
    has_many :votes, :dependent => :destroy 

    def vote_count 
     return self.votes.count 
    end 

    def votes_status(status) 
     return self.votes.where('up like ?', status).count.to_f 
    end 

    def percent 
     return self.votes_status(true)/self.vote_count 
    end 

end 
+0

ОК спасибо. Как насчет сферы? –

+0

Вы можете перемещать эти методы в области, подобной этой: scope: votes_status, lambda {| status = false | self.votes.where ('up like?', Status) .count.to_f } – Thorin

Смежные вопросы