Разделение массива на запятую с кавычками - PullRequest
3 голосов
/ 22 декабря 2010

Я вручную создаю 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 ]

11 голосов
/ 22 декабря 2010

Используйте map и join:

@categories_string = @categories_array.map {|element|
  "'#{element}'"
}.join(',')
5 голосов
/ 22 декабря 2010

Эта функциональность встроена в ActiveRecord:

Model.where(:my_field => ['blue','green','red'])
5 голосов
/ 22 декабря 2010

Собираетесь ли вы передать эту строку в метод поиска ActiveRecord?

Если это так, ActiveRecord будет обрабатывать это для вас автоматически:

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

# => SELECT * FROM models WHERE (category in ('foo', 'bar', 'baz'))

Надеюсь, это поможет.

0 голосов
/ 17 апреля 2018

Rails (фактически ActiveSupport, часть инфраструктуры Rails) предлагает очень хороший метод Array # to_sentence.

Если вы используете Rails или ActiveSupport, вы можете позвонить

['собака', 'кошка', 'птица', 'обезьяна']. To_sentence

result = "собака, кошка, птица и обезьяна"

0 голосов
/ 22 декабря 2010

Если вы используете хэш параметра, вам не нужно делать ничего особенного:

Model.all(:conditions => {:category => @categories_array})
# => SELECT * FROM models WHERE (category in ('foo', 'bar', 'baz'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...