如何在Ruby on Rails中以相同的价格对产品进行排序?

时间:2013-12-07 13:34:49

标签: sql ruby-on-rails ruby activerecord ruby-on-rails-4

在我show上午的products视图中,使用以下功能链接到下一个产品(按price排序):

class Product < ActiveRecord::Base 

  belongs_to :user

  def next
    Product.where("user_id = ? AND price > ?", user_id, price).order("price ASC").first 
  end

end

只要所有产品的价格不同,此功能就有效。当两个产品具有相同的价格时,该功能不再有效,因为它总是在寻找更高的价格。

如果user可以使用上述功能点击所有他的产品,即使某些产品的价格没有差异,我怎么能这样做呢?

我尝试用>替换>=,但这将始终返回相同的产品,使该功能基本无用。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

此方法仅在产品严格订购时才有效。一个解决方案可能是首先按价格对它们进行排序,然后通过id(条件稍微复杂一些)进行排序:

def next
  Product.where("user_id = :user_id AND (price > :price OR (price = :price AND id > :id))", user_id: user_id, price: price, id: id)
    .order("price ASC, id ASC").first 
end

如果产品有unique名称或标签,您可以在ID上使用此属性,因此具有相同价格的产品按字母顺序排序,这可能比id更有意义。

答案 1 :(得分:1)

大于>=加上不同的product_id

def next
  Product.
    where("id <> ?", id).
    where("user_id = ?", user_id).
    where("price >= ?", price).
    order("price ASC").
    first 
end