从查询中排除Rails ActiveRecord

时间:2014-08-27 16:44:41

标签: ruby-on-rails activerecord

我正在开发一个市场应用程序,卖家可以列出要出售的商品。在列表展示页面上,我开发了一个名为"此卖家的其他商品的小部件"。我使用以下查询将这些项目拉入视图。

Listing.where(:user_id => @listing.user)

这有效,但它包含了activerecord。因为这是"其他项目的小部件"我想要排除用户当前所在页面的列表。请注意" user_id"列表模型中的字段是卖家用户ID。

我该如何修改?我尝试了以下但它给了我一个错误,说它期望" =>"。

Listing.where(:user_id => @listing.user, :id != @listing.id)

3 个答案:

答案 0 :(得分:3)

如何简单地将数组参数用于where

@listing.user.listings.where(["id != ?", @listing])

OR(更好的表现

Listing.where(["user_id = ? AND id != ?", @listing.user_id, @listing.id])

答案 1 :(得分:1)

为完整起见,如果您使用的是rails 4.x,则可以使用.where.not

Listing.where(user_id: @listing.user_id).where.not(id: @listing.id)

答案 2 :(得分:0)

除了RAJ's回答之外,您可以将这两个子句链接起来进行一次查询

Listing.where(:user_id => @listing.user).where("id != ?", @listing.id)