Rails,将数组作为条件传递给查询

时间:2013-06-20 17:30:38

标签: database ruby-on-rails-3

我根据视图传递的条件调用数据库,因此必须是动态的。

假设我有2个数组:

columns = ['col1', 'col2', 'col3']
vals = ['val1', 'val2', val3']

查询很容易创建,我可以进行连接,比如

query = columns[0] + " = (?) AND" + ...

但参数怎么样?

@finalValues = MyTable.find(:all, :conditions => [query, vals[0], vals[1]... ])

但我不知道会收到多少参数。因此,虽然使用for loop和连接解决了查询问题,但我可以执行以下操作:

@finalValues = MyTable.find(:all, :conditions => [query, vals])

rails会理解我没有为IN(?)子句传递数组,而是为每个人(?)分割值?

或者我是唯一一个选择完整原始字符串并选择它的选项吗?

1 个答案:

答案 0 :(得分:2)

你可以用查询作为第一个元素创建条件数组,并将所有val元素附加到它。

query = columns.map {|col| "#{col} = ?"}.join(" AND ")
@finalValues = MyTable.find(:all, :conditions => [query, *vals])

要注意的是,列和val应该具有相同数量的元素。