Код:
{ db = Mysql2::Client.new( :host => 'localhost', :username => 'username',
password => 'password', :database => 'database')
results = db.query("select * from users where exported is not TRUE OR
NULL").each(:as => :array)
results.each { | row | puts row[1]}
Линия вывода results.each выводит данные компании, и я хочу использовать каждую строку в качестве ввода в вызове API. Есть идеи, как это сделать? Каждая строка должна содержать атрибут, как показано ниже.
"requested_item_value_attributes" => {
"employee_first_name_6000555821" => 'results.each { | row | puts row[0]}',
"employee_last_name_6000555821" => "results.each { | row | puts row[1]}",
"hiring_manager_6000555821" => "results.each { | row | puts row[2]}",
"job_title" => "results.each { | row | puts row[3]}",
"start_date" => "#results.each { | row | puts row[4]}"
}






Ты можешь использовать
nameArray = Array.new
nameArray.push(nameToSave)
добавить переменную nameToSave в конец массива nameArray.
Просто вызовите push для каждого из ваших результатов, и у вас будет массив со всеми вашими именами из вашего запроса.
Используйте второй аргумент метода query.
results = []
db.query('SELECT * FROM table', results)
Используйте [Array#map], чтобы сопоставить results с массивом:
results.map do |row|
"requested_item_value_attributes" => {
"employee_first_name_6000555821" => row[0],
"employee_last_name_6000555821" => row[1],
"hiring_manager_6000555821" => row[2],
"job_title" => row[3],
"start_date" => row[4]
}
}
или, что еще лучше:
results.map do |row|
"requested_item_value_attributes" =>
%w[
employee_first_name_6000555821,
employee_last_name_6000555821,
hiring_manager_6000555821,
job_title,
start_date
].zip(row.take(5)).to_h
}
}
Если вы хотите сохранить результаты итерации коллекции, используйте map / collect.