Ruby/Rails:考虑活动记录的 to_csv 的正确实现方式

Ruby/Rails: Correct way to implement to_csv that considers active record

离开游戏有一段时间了,现在又回来了..

因此,我有了公司。 公司 have_many 用户和用户 belongs_to 一家公司。

获取用户列表非常容易@company.users..太棒了。

除此之外,您还可以做一些方便的事情,例如 @company.users.where({foo}).limit({bar}).to_json 以获得 json 用户列表等...效果很好。

我想做 @company.users.to_csv 或更好 @company.users.where({some query}).limit({somenumber}).to_csv 但当然它在那里出错并说“你是说 to_s” 或类似的东西..

我发誓我们曾经能够做到 .to_csv 或至少使用序列化程序做到这一点,但该死的,如果我记得如何..有人能指出我正确的方向吗?

我可以为 .to_csv 的模型添加一个自定义方法,但是当你得到一堆时这不起作用..有什么想法吗?我觉得这应该是微不足道的,我很难过。

require "csv" 不要忘记包含模块

@company.users.to_a.to_csv

您可以像这样在用户模型上定义 to_csv 函数。

   
  def self.to_csv(users, options = {})
    header_columns = [
      "Email",
      "First Name",
      "Last Name"
    ]

    CSV.generate(options) do |csv|
      csv << header_columns
      users.each do |user|
        row = [
          user.email,
          user.first_name,
          user.last_name
        ]
        csv << row
      end
    end
  end

然后这样称呼它。

User.to_csv(@company.users)