可以更优雅地使用带有问号的Rails`哪里'查询?

时间:2013-09-12 08:53:34

标签: ruby-on-rails ruby

假设您在Rails中有一个简单的查询,就像这样

a = 42
Klass.where("`column_1` = ? OR `column_2` = ? OR `column_3` = ?", a, a, a) 

这可以更优雅地完成,这样您就不需要输入a, a, a三次了吗?它工作正常,但看起来很糟糕。

4 个答案:

答案 0 :(得分:8)

可以尝试这样的事情

Klass.where(["`column` = :a OR `column` = :a OR `column` = :a", { a: user_name }])

答案 1 :(得分:1)

就我个人而言,我会在以下条件下使用find:

 Klass.find_all_by_column([1, 2, 3])

将“列”替换为您要搜索的列名称。 用您的值替换1,2,3,它是一个可以添加或删除值的数组。

我的示例将生成一个SQL查询,例如:     SELECT * FROM Klass WHERE Klass.column IN(1,2,3)

有关Active record documentation的详情。

答案 2 :(得分:0)

不,你不能更优雅地做到这一点。

我猜你的列应该都是不同的列,对吗?请在您的问题中更具体。

如果列相同且值不同,则只能简化语句。

abc = [42,21,84]
Klass.where("column IN (?)", abc)

答案 3 :(得分:-1)

也许你的行

Klass.where("`column` = ? OR `column` = ? OR `column` = ?", a, a, a) 

可以改为

Klass.where(["`column` = ? OR `column` = ? OR `column` = ?"] + a*3)