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)
离开游戏有一段时间了,现在又回来了..
因此,我有了公司。 公司 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)