【问题标题】:Separating an Array into a comma separated string with quotes用引号将数组分隔成逗号分隔的字符串
【发布时间】:2010-12-22 02:35:46
【问题描述】:

我正在手动构建一个 SQL 查询,其中我在 SQL IN 语句的 params 哈希中使用一个数组,例如:("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

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

【问题讨论】:

  • @user548744 不要忘记将正确答案标记为已接受!

标签: ruby-on-rails ruby activerecord


【解决方案1】:

使用mapjoin

@categories_string = @categories_array.map {|element|
  "'#{element}'"
}.join(',')

【讨论】:

  • 如果我想要这种形式的数组,那么代码应该是什么。蓝色(换行) 绿色(换行) 红色
【解决方案2】:

此功能内置于 ActiveRecord:

Model.where(:my_field => ['blue','green','red'])

【讨论】:

    【解决方案3】:

    您是否要将此字符串传递给 ActiveRecord 查找方法?

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

    categories_array = ['foo', 'bar', 'baz']
    Model.find(:all, :conditions => ["category in (?)", categories_array])
    
    # => SELECT * FROM models WHERE (category in ('foo', 'bar', 'baz'))
    

    希望这会有所帮助。

    【讨论】:

    • 谢谢 - 非常感谢。在这种情况下,我有一个搜索表单并且(因为我无法在我们的内部工作服务器上安装 Sphinx)我正在使用 MySQL 全文搜索。当您需要使用 MySQL 的“WHERE MATCH”时,我还没有看到使用 ActiveRecord 查找方法的方法,所以我假设我必须手动构建查询字符串并使用“find_by_sql”方法。不过,这对我来说仍然很新鲜。
    【解决方案4】:

    如果您使用的是参数哈希,则不必做任何特别的事情:

    Model.all(:conditions => {:category => @categories_array})
    # => SELECT * FROM models WHERE (category in ('foo', 'bar', 'baz'))
    

    【讨论】:

      【解决方案5】:

      Rails(实际上是 ActiveSupport,Rails 框架的一部分)提供了一个非常好的Array#to_sentence method

      如果你使用 Rails 或 ActiveSupport,你可以调用

      ['dog', 'cat', 'bird', 'monkey'].to_sentence # "dog, cat, bird, and monkey"
      

      【讨论】:

      • 这不加引号
      猜你喜欢
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      • 2020-08-30
      • 2017-01-05
      • 1970-01-01
      • 2017-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多