Ruby on Rails如何将to_csv方法移至控制器实现CSV导出
实现方案
所有改动仅涉及两个文件,其余视图、路由代码均不需要调整:
步骤1:移除模型层的CSV方法
删除app/models/user.rb中原本定义的self.to_csv方法即可。
步骤2:修改控制器代码,将CSV生成逻辑移入
修改app/controllers/admins/users_controller.rb的index动作如下:
def index @users = User.all respond_to do |format| format.html format.csv do # 定义需要导出的字段,和原实现保持一致导出email,可按需调整 export_fields = ['email'] # 生成CSV内容 csv_content = CSV.generate do |csv| # 写入表头 csv << export_fields # 逐行写入用户数据 @users.each do |user| csv << user.attributes.values_at(*export_fields) end end # 触发下载,可自定义导出文件名 send_data csv_content, filename: "用户列表_#{Date.today}.csv" end end end
说明
如果后续需要调整导出字段,直接修改export_fields数组的内容即可,和原模型实现的功能完全一致,不需要修改其他配置。
如果运行时提示uninitialized constant CSV,在Gemfile中添加gem 'csv'执行bundle install后重启服务即可。
内容的提问来源于stack exchange,提问作者andriybureviy
相关产品推荐
相关产品推荐

