在我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
可以使用上述功能点击所有他的产品,即使某些产品的价格没有差异,我怎么能这样做呢?
我尝试用>
替换>=
,但这将始终返回相同的产品,使该功能基本无用。
有人可以帮忙吗?
答案 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