Rails跨关联模型生成CSV:将Booking表guest_id替换为User表对应字段
实现方案
前置配置
首先确认Booking模型已配置和User模型的关联,在app/models/booking.rb中添加如下声明:
class Booking < ApplicationRecord # 关联guest_id到User表,关联对象名为guest belongs_to :guest, class_name: 'User', foreign_key: 'guest_id' end
修改to_csv方法
直接调整属性列表和取值逻辑即可,新增安全导航符避免关联用户为空时报错:
def self.to_csv # 定义导出的CSV表头 attributes = %w[first_name last_name email] CSV.generate(headers: true) do |csv| csv << attributes all.each do |booking| user = booking.guest csv << [user&.first_name, user&.last_name, user&.email] end end end
优化建议
- 调用导出方法时建议预加载关联数据避免N+1查询问题,写法为
Booking.includes(:guest).to_csv - 若存在无对应用户的 booking 记录,可给空值设置默认展示内容,例如将
user&.first_name修改为user&.first_name || '无'
内容的提问来源于stack exchange,提问作者Rene Chan
相关产品推荐
相关产品推荐

