我正在尝试将字符串连接到数组值。由于URL /域相同,我只是存储用户的电子邮件前缀并附加url / domain。我需要将完整的电子邮件地址导出为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, user1@example.com
Bob, user2@example.com
我如何实现上述目标?
答案 0 :(得分:1)
location
是一个模型对象,对吧?
CSV.generate(options) do |csv|
domain = "example.com"
all.each do |location|
csv << [location.name, "#{location.email_address}@#{domain}"]
end
end
更新
IMO也更清洁。但是如果你想保留你的版本,那么我建议你在full_email_address
模型中创建一个Location
方法,返回类似username@domain.com
的内容。
然后,您可以稍后更改列数据并轻松修改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
答案 1 :(得分: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
添加到属性数组中,而是将其添加到最后一个属性中。