2014-11-08 110 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我的投票模型只跟踪画面和用户ID,并拥有高达:布尔,:默认=>假

这一切都似乎比它可能是不够简明,你会如何写这更好的?

回答

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

好的谢谢。范围如何? – 2014-11-08 05:45:37

+0

您可以在范围内移动这些方法,例如: 范围:votes_status,lambda {| status = false | self.votes.where('up like?',status).count.to_f } – Thorin 2014-11-08 05:53:35