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

Ren*_*eno 3 ruby activerecord ruby-on-rails

我正在手动构建一个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
Run Code Online (Sandbox Code Playgroud)

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

Jac*_*kin 11

使用mapjoin:

@categories_string = @categories_array.map {|element|
  "'#{element}'"
}.join(',')
Run Code Online (Sandbox Code Playgroud)


Dan*_*ail 5

你打算将这个字符串传递给ActiveRecord find方法吗?

如果是这样,ActiveRecord将自动为您处理:

categories_array = ['foo', 'bar', 'baz']
Model.find(:all, :conditions => ["category in (?)", categories_array])

# => SELECT * FROM models WHERE (category in ('foo', 'bar', 'baz'))
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.


Mar*_*mas 5

此功能内置于ActiveRecord中:

Model.where(:my_field => ['blue','green','red'])
Run Code Online (Sandbox Code Playgroud)