3

Let's say you have a simple query in Rails which goes like this

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

Can this be done more elegantly so that you don't need to type a, a, a three times? It works fine but it looks horrible.

4

4 回答 4

11

可以试试这样的

Klass.where(["`column` = :a OR `column` = :a OR `column` = :a", { a: user_name }])
于 2013-09-12T09:01:12.773 回答
0

就我个人而言,我将使用带有 in 条件的 find by,例如:

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

将 'column' 替换为您希望在其中搜索的列名。将 1,2,3 替换为您的值,这是一个您可以从中添加或删除值的数组。

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

有关活动记录文档的更多信息。

于 2013-09-12T09:00:42.070 回答
0

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

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

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

abc = [42,21,84]
Klass.where("column IN (?)", abc)
于 2013-09-12T09:02:33.920 回答
-2

也许你的线

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

可以改成

Klass.where(["`column` = ? OR `column` = ? OR `column` = ?"] + a*3)
于 2013-09-12T09:04:42.470 回答