Rails范围lambda与2 where子句

时间:2016-06-15 16:05:30

标签: ruby-on-rails-4 lambda scope

我有这个很好地给了我下一个和之前的项目:

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!

2 个答案:

答案 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可能是一个随机数(例如,隐藏购买总数)