使用引号将Array分隔为逗号分隔的字符串

时间:2010-12-22 02:35:46

标签: ruby-on-rails ruby activerecord

我正在手动构建一个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

所以,我很好但很好奇这样做的正确和更简洁的方式是什么样的?

5 个答案:

答案 0 :(得分:11)

使用mapjoin

@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 =“狗,猫,鸟和猴子”