我正在手动构建一个SQL查询,其中我在params哈希中使用了一个SQL IN语句,如:(“WHERE my_field IN('blue','green','red')”) 。所以我需要获取数组的内容并将它们输出到一个字符串中,其中每个元素都是单引号和逗号分隔(并且没有结尾的逗号)。
所以如果数组是:my_array = ['blue','green','red']
我需要一个类似于"'blue','green','red'"
我对Ruby / Rails很陌生,但想出了一些有用的东西:
if !params[:colors].nil?
@categories_array = params[:colors][:categories]
@categories_string =""
for x in @categories_array
@categories_string += "'" + x + "',"
end
@categories_string.chop! #remove the last comma
end
所以,我很好但很好奇这样做的正确和更简洁的方式是什么样的?
答案 0 :(得分:11)
使用map
和join
:
@categories_string = @categories_array.map {|element|
"'#{element}'"
}.join(',')
答案 1 :(得分:5)
您是否要将此字符串传递给ActiveRecord查找方法?
如果是这样,ActiveRecord会自动为您处理:
categories_array = ['foo', 'bar', 'baz']
Model.find(:all, :conditions => ["category in (?)", categories_array])
# => SELECT * FROM models WHERE (category in ('foo', 'bar', 'baz'))
希望这有帮助。
答案 2 :(得分:5)
此功能内置于ActiveRecord中:
Model.where(:my_field => ['blue','green','red'])
答案 3 :(得分:0)
如果您使用参数哈希,则不必做任何特别的事情:
Model.all(:conditions => {:category => @categories_array})
# => SELECT * FROM models WHERE (category in ('foo', 'bar', 'baz'))
答案 4 :(得分:0)
Rails(实际上是ActiveSupport,Rails框架的一部分)提供了一个非常好的Array#to_sentence方法。
如果您使用的是Rails或ActiveSupport,则可以调用
['dog','cat','bird','monkey']。to_sentence
result =“狗,猫,鸟和猴子”