例如,请考虑以下代码(在模型中):
scope :popular, where("views >= 250 OR (views >= 10 AND avg_rating >= 4.75)")
def popular?
views >= 250 or views >= 10 && avg_rating >= 4.75
end
第一个条件是SQL,第二个条件是ruby,但仍然存在明显的重复。干嘛有什么好方法吗?这种情况的最佳做法是什么?
答案 0 :(得分:2)
有充分的理由同时拥有两者,所以我可能会考虑这一点(全部在模型中):
VIEWS_QUALIFIER = 250
RATING_VIEWS_QUALIFIER = 10
RATING_QUALIFIER = 4.75
scope :popular, where("views >= ? OR (views >= ? AND avg_rating >= ? ",
VIEWS_QUALIFIER, RATING_VIEWS_QUALIFIER, RATING_QUALIFIER)
def popular?
views >= VIEWS_QUALIFIER or
(views >= RATING_VIEWS_QUALIFIER && avg_rating >= RATING_QUALIFIER)
end
答案 1 :(得分:0)
def popular?
!!self.class.popular.includes? self
end