2011-04-24 143 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列名称和括号。