2010-03-02 51 views
3

我想搜索show屬性爲true的用戶。find中的布爾條件的正確語法

show = true 
@users = User.find(:all, 
       :conditions => ["show = ?", show]) 

這似乎不適合我。

+0

你可以發佈你的用戶表模式嗎? – 2010-03-02 02:20:22

+0

class CreateUsers 「1」 .... – chief 2010-03-02 03:40:51

回答

1

語法看起來很適合我。

你的development.log顯示了什麼?查詢SQL應該在那裏顯示爲執行。

+0

這是錯誤:ActiveRecord :: StatementInvalid(Mysql :: Error:您的SQL語法中有錯誤;請檢查相應的手冊你的MySQL服務器版本的正確語法使用附近'顯示= 1) – chief 2010-03-02 01:41:43

3

嘗試查詢的另一個版本:

User.find_all_by_show(true) 

確保users表中有一個tinyint(1)(即boolean)列稱爲show

我以前見過這種行爲。對於陣列條件,我必須使用1/0代替truefalse。試試這個:

show = 1 
@users = User.find(:all, 
       :conditions => ["show = ?", show]) 
+0

是的這個工程,使用控制檯。 – chief 2010-03-02 03:33:19

+0

雖然我更喜歡使用其他方式,因爲我在查找中有其他條件。 – chief 2010-03-02 03:41:35

+0

我已經更新了我的答案。試試我在答案中提出的第二種方法。 – 2010-03-02 05:48:24

5

你的例子應該可以工作。如果您運行的是舊版本的rails,則可能需要重新啓動服務器。

另一種選擇是使用哈希語法像...

@users = User.find(:all, :conditions => {:show => true}) 

然後你就可以在哈希中只需添加您的其他條件。

+0

這個哈希將爲我工作。 – chief 2010-03-02 04:19:55

0

您正在使用哪個數據庫? MySQL或SQLite?

在MySQL布爾值存儲爲1和0,並與其他數據庫不同,所以在遷移指定默認值爲1

請檢查一遍,然後重試。

由於Toby Hede表示您可以檢查日誌中生成的查詢,並嘗試在查詢瀏覽器或任何其他位置運行該查詢,並查看您是否獲得了預期的結果。