2014-12-19 3 views
0

Я пытаюсь объединить строку в значение массива. Поскольку URL/домен один и тот же, я просто храню префикс электронной почты пользователей и добавляю URL/домен. Мне нужно экспортировать полный адрес электронной почты, чтобы CSV:Конкатенировать массив и строку для CSV

CSV.generate(options) do |csv| 
    columns = %w(name, email_address) 
    url = "@example.com" 
    all.each do |location| 
     csv << location.attributes.values_at(*columns) + [url]  
    end 
    end 

В настоящее время в результате выход:

Joe, user1, @example.com 
Bob, user2, @example.com 

Что мне нужно:

Joe, [email protected] 
Bob, [email protected] 

Как можно достичь выше ?

+0

'csv << [location.name," #{location.email_address}@example.com "]' должен работать. – Stefan

+1

Здравствуйте, @Stefan. Вы были [AWOL] (http://www.thefreedictionary.com/AWOL). –

ответ

1

location - модельный объект, не так ли?

CSV.generate(options) do |csv| 
    domain = "example.com" 

    all.each do |location|  
    csv << [location.name, "#{location.email_address}@#{domain}"] 
    end 
end 

Update:

IMO, что чище, а также. Но если вы хотите сохранить свою версию, я предлагаю вам создать метод full_email_address в вашей модели Location, который возвращает что-то вроде [email protected].

Затем вы можете впоследствии изменить данные столбцов и легко изменить свой результат CSV. Например:

class Location << ActiveRecord::Base 
    def full_email_address 
    return "" if self.email_address.blank? 

    domain = "example.com" # or save this as a constant in the class 
    "#{self.email_address}@#{domain}" 
    end 
end 

CSV.generate(options) do |csv| 
    columns = %w{name full_email_address} # add other methods or attributes here 

    all.each do |location| 
    csv << columns.map{ |moa| location.public_send(moa) } 
    end 
end 
+0

Работал отлично, спасибо! – user464180

0

Попробуйте это:

CSV.generate(options) do |csv| 
    columns = %w(name, email_address) 
    url = "@example.com" 
    all.each do |location| 
    row = location.attributes.values_at(*columns) 
    row[-1] = row[-1] + url 
    csv << row 
    end 
end 

В настоящее время массив записывается в CSV является ['Joe', 'user1'] + ['@example.com'], поэтому вместо добавления url в массив атрибутов Я добавляю его до последнего атрибута.

+0

'row [-1] + = url' будет лучше – Humza

+0

' row [-1] << url' будет еще лучше. –

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