2014-08-27 75 views
1

我正在開發一個市場應用程序,賣家可以列出要銷售的物品。在上市展示頁面上,我開發了一個名爲「來自此賣家的其他物品」的小部件。我使用下面的查詢將這些項目拉入視圖。從查詢中排除Rails ActiveRecord

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

這可行,但它包括activerecord。由於這是一個「其他項目」的部件,我想排除用戶當前所在頁面的列表。請注意,列表模型中的「user_id」字段是賣家用戶標識。

我該如何修改?我嘗試了下面的內容,但它給了我一個錯誤,說它期望有一個「=>」。

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

的'where'你定義有一個隱含的哈希值,所以你不能丟在其中間的任意代碼中,這違反了語法規則。 – tadman 2014-08-27 16:57:26

回答

3

如何簡單地使用陣列參數where

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

OR(更好的性能

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

在第二個示例中缺少「AND」。 – tadman 2014-08-27 16:56:43

+0

@tadman謝謝:) – RAJ 2014-08-27 16:57:16

+0

此外''括號不是必須的,至少不是現代版本的Rails。只是稍微清理一下。 – tadman 2014-08-27 16:58:20

0

除了RAJ's的回答,您可以鏈上的兩個條款,做一個查詢

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

'Listing.where(:user_id => @ listing.user )'這會導致錯誤'@ listing.user'它應該是'@ listing.user_id' – RAJ 2014-08-27 16:55:37

1

爲了完整起見,如果您使用的軌道4.x中你可以使用.where.not

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