我有这个很好地给了我下一个和之前的项目:
timediff
在我看来:
scope :next, lambda {|id| where("id > ?",id).order("id ASC") }
scope :previous, lambda {|id| where("id < ?",id).order("id DESC") }
def next
Item.next(self.id).first
end
def previous
Item.previous(self.id).first
end
我想在上面进行增强,这样我就不会只获得下一个/上一个项目,而是下一个/上一个项目具有相同的内容:source_id(我的项目有source_id)。
在这里找到两个类似的问题,但不能将它应用于我的例子:
How to have multiple conditions in a named scope?
Rails scope with 2 where clauses
TIA!
答案 0 :(得分:0)
只需为您的示波器添加条件。
scope :next, lambda {|id, source_id| where("id > ? AND source_id> ?", id, source_id).order("id ASC") }
def next
Item.next(self.id, self.source_id).first
end
如果您想仅使用id
保留旧范围,则有很多选项 - 使用其他名称制作新范围,检查source_id
是否为nil
你的lambda块并给它一个默认值(或更改where子句)。
如果您只是使用它们来定义下一个/上一个方法,我建议您不要打扰您的示波器。你可以用
切入追逐def next
Item.where("id > ?", self.id).first
end
答案 1 :(得分:0)
对created_at
进行比较比较普遍,因为id
可能是一个随机数(例如,隐藏购买总数)