2013-09-05 5 views
0
irb(main):001:0> a = ["global climate change", "calamity", "glaciers", "new york times"] 
    => ["global climate change", "calamity", "glaciers", "new york times"] 
irb(main):002:0> a.join(', ') 
    => "global climate change, calamity, glaciers, new york times" 

мне нужен результат, чтобы бытьПрисоединение массив слов/фраз с Руби

=> "global climate change", "calamity", "glaciers", "new york times" 

Идеи? Идеал был бы одним лайнером.

+0

результат '= '"' + a.join (' "" ') +' '' '? Или, другими словами: 'result =" \ "# {a.join ('", "')} \" "' – MrYoshiji

+0

Какой тип данных вы ожидаете от результата? Одна строка или массив? –

+0

Вам нужно это как выход? Поскольку вы не смогли сохранить нужный результат в переменной, так как это не «массив», а «строка» –

ответ

2

Правильный способ передать массивы вариантов запроса через ActiveRecord просто использовать параметры запроса:

a = ["global climate change", "calamity", "glaciers", "new york times"] 
Category.where("name IN (?)", a) 
# Generated query: 
# Category Load (0.4ms) SELECT `categories`.* FROM `categories` WHERE (name in ('global climate change','calamity','glaciers','new york times')) 

Вам не нужно делать ничего особенного, чтобы превратить его в действительный фрагмент SQL. Вам следует избегать форматирования строк как фрагментов SQL, так как без тщательной дезинфекции вы можете открыть уязвимости SQL-инъекций в своем приложении.

+0

Так я и хотел! ха-ха. Я продолжал получать это, хотя «ActiveRecord :: StatementInvalid: SQLite3 :: SQLException: near», »: синтаксическая ошибка: SELECT« категории ». * FROM« category »WHERE (имя IN« глобальное изменение климата »,« бедствие », «лед», «таяние льда», «nasa», «новые времена york») ' – Dudo

+2

Убедитесь, что вы обернули свой? в скобках. Ваш запрос должен быть 'name в (?)', А не 'name in?'. –

+0

AHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH! – Dudo

0
a = ["global climate change", "calamity", "glaciers", "new york times"] 
=> ["global climate change", "calamity", "glaciers", "new york times"] 
%Q!"#{a.join('", "')}"! 
=> "\"global climate change\", \"calamity\", \"glaciers\", \"new york times\"" 
a.map{|e| "\"#{e}\""}.join(', ') 
=> "\"global climate change\", \"calamity\", \"glaciers\", \"new york times\"" 
0
array = ['bob', 'bill'] 
new_array_string = array.map { |name| "'#{name}'" }.join(',') 
=> "'bob', 'bill'" 
User.where("name IN (#{new_array_string})") 
2

Использование массивов в запросе очень прост:

arr = ["global climate change", "calamity", "glaciers", "new york times"] 
Category.where(:name => arr) 

Там нет абсолютно никакой необходимости генерировать некоторые странные строки;)

Смежные вопросы