2014-06-25 66 views
0

將以下用戶條件設置爲不相等的正確語法是什麼?在散列中不等於運算符?

@instance = Comment.all(:joins => :user, :conditions => { :users => { :status => 'unpaid' } }) 

換句話說,我試圖完成類似這樣的事情,但顯然語法不起作用。

@instance = Comment.all(:joins => :user, :conditions => { :users => { :status != 'unpaid' } }) 

非常感謝!

+0

我不是100%肯定,但會'... {用戶![:狀態] = '無償'} ......工作? – Bala

回答

1
Comment.joins(:user).where("users.status != 'unpaid' or users.status is null") 

在這種情況下,你會得到誰擁有的地位的所有用戶沒有報酬或沒有任何地位。此查詢生成SQL波紋管:

SELECT "comments".* FROM "comments" INNER JOIN "users" ON "comments"."user_id" = "users"."id" WHERE ("user.status != 'unpaid' or user.status is null") 
+1

嗨,這是一個很好的解決方案......但是如果你能解釋你所做的改變以及它們爲什麼會起作用 - 這將有助於未來的新手在他們自己遇到問題時找到這個解決方案:)不要忘記什麼是對你或我來說很明顯,對於一個新手來說可能並不明顯 - 他們中的很多人通過谷歌到達S/O ......他們可以從你的經驗中學習:) –

+0

不知道還有什麼可寫的。如果可以,請添加更多解釋。謝謝 – zauzaj

+0

我會解釋我是如何改變使用舊的「all」+ hash「語法來使用'.join'和'.where'的arel版本,以及爲什麼這個改變是好的,以及指出要使用!=你需要將它作爲一個sql字符串傳遞,而不是使用默認的hash-syntax ......再加上我會解釋爲什麼需要添加查詢的「is null」部分。 –

0

您必須編寫一小段SQL來完成這項工作。試試這個:

Comment.joins(:user).where("users.status != 'unpaid'") 

產生:

> Comment.joins(:user).where("users.status != 'unpaid'").to_sql 
SELECT "comments".* FROM "comments" INNER JOIN "users" ON "users"."id" = "comments"."user_id" WHERE (users.status != 'unpaid') 

以包括零或空狀態的結果:

Comment.joins(:user).where("users.status != 'unpaid'").where("user.status" => "").where("user.status" => nil) 
+0

嗨戴夫。這似乎只返回一條記錄。但是,我還想返回其他記錄,該記錄對於此「狀態」屬性爲空或零。有什麼想法嗎? – mattq

1

你也可以這樣做

Comment.joins(:user).where("status != ? or status is null",'unpaid')