我有一系列的ActiveRecord模型,我想把它们转换成CSV.我试着研究像FasterCSV这样的Gem,但它们似乎只适用于字符串和数组,而不是ActiveRecord模型.

简而言之,我想转换:

user1 = User.first
user2 = User.last
a = [user1, user2]

TO:

   id,username,bio,email
    1,user1,user 1 bio,user1 email
    1,user2,user 2 bio,user2 email

有没有一个简单的方法可以做到这一点?

推荐答案

以下内容将所有用户的属性写入一个文件:

CSV.open("path/to/file.csv", "wb") do |csv|
  csv << User.attribute_names
  User.find_each do |user|
    csv << user.attributes.values
  end
end

类似地,您可以创建一个CSV字符串:

csv_string = CSV.generate do |csv|
  csv << User.attribute_names
  User.find_each do |user|
    csv << user.attributes.values
  end
end

Ruby-on-rails相关问答推荐

对Rails进行枚举不允许空值

DELETE_IF和REJECT的意外行为!方法

在Ruby on Rails中获取堆栈级别太深错误(&Q)

我使用rbenv安装Ruby,但我在使用";gem";->;错误:执行gem时遇到此错误.(Errno::EACCES)权限被拒绝

使用拆分成多个部分的种子文件进行Rails数据种植

使用带有 Paper Trail gem 的子类

复制我的活动时,活动描述没有复制过来

如何在 IRB/Rails 控制台中 suppress 返回值的输出?

Rails Scope 返回 all 而不是 nil

blueprint/screen.css 未预编译

如何在 rails 中指定和验证枚举?

如何在rails中发回js.haml

Rails 3 中的猴子补丁

带有 master.key 的 Rails 5.2 - Heroku 部署

在 Devise on Rails beta 3 中创建管理员用户

rbenv:没有 gemsets 生存

活动管理员:仅自定义新表单

Ruby:如何将一种方法接收到的所有参数和块传递给另一种方法?

在任何来源中都找不到 thread_safe-0.3.0

Rails:弃用警告:您没有设置 config.secret_key_base