首页 > 解决方案 > Ruby/Rails:实现考虑活动记录的 to_csv 的正确方法

问题描述

有段时间没玩了,又回来玩了。。

所以,我有公司。公司有_许多用户和用户属于_一个公司。

@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 模型添加一个自定义方法,但是当你得到一堆时这不起作用..想法?我觉得这应该是微不足道的,我很难过。

标签: ruby-on-railsrubyrails-activerecord

解决方案


您可以像这样在用户模型上定义 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)

推荐阅读