2011-04-24 90 views
1

我想創建一個查找方法。應該找到所有具有「1分鐘」或「2分鐘」tid並且形式爲「Nyhedsbrev」的konkurrencer。Rails幫助查找方法

我已經試過這樣的事情:

Konkurrancer.where("tid = ? or ? and form = ?", "2 min", "1 min", "Nyhedsbrev") 

它不工作。它只能找到所有形式爲Nyhedsbrev的konkurrencer。

回答

2

也許這個按預期工作。

Konkurrancer.where("tid IN (?) AND form = ?", ['2 min', '1 min'], 'Nyhedsbrev') 

除此之外,你要使用的「或」 syntac是這樣寫的SQL:

SELECT * FROM foo WHERE column1 = 'foo' OR column1 = 'BAR' 

注意,爲「OR」條件,你仍然需要列出列重新命名。

+0

我會批准你的答案。你知道我在哪裏可以閱讀關於SQL的SQL查找方法。我現在不知道那個人可以使用IN(?) – 2011-04-24 20:01:25

+0

你可以在這裏閱讀關於ActiveRecord查詢界面:http://guides.rubyonrails.org/active_record_querying.html 通常你可以在SQL中做的一切,你可以在ActiveRecord 。 – 2011-04-24 20:03:14

1

試試這個:

Konkurrancer.where("tid = ? or tid = ?", "2 min", "1 min").where(:form => "Nyhedsbrev") 

您還可以使用:

Konkurrancer.where("form = ? and (tid = ? or tid = ?)", "Nyhedsbrev", "2 min", "1 min") 
+0

它是有效的SQL,但它不按預期工作。謝謝。 – retro 2011-04-24 20:05:16

+0

當然,它也在工作,但沒有必要的效果。感謝您的評論,我解決了我的答案。 – retro 2011-04-24 20:11:08

1

你的SQL是有點不對,我想你想要這樣的:

Konkurrancer.where(
    "(tid = ? or tid = ?) and form = ?", 
    "2 min", 
    "1 min", 
    "Nyhedsbrev" 
) 

注二等提的tid列名稱和括號。