You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby on Rails 如何读取上传的CSV文件并赋值给模型total字段

代码修改步骤

1. 引入CSV标准库

在FriendsController文件顶部加入引用:

require 'csv'

2. 调整强参数配置

修改控制器私有方法friend_params,允许上传的文件参数透传:

def friend_params
  params.require(:friend).permit(:first_name, :last_name, :total, :File)
end

3. 新增创建场景的CSV处理逻辑

修改create方法,在初始化@friend之后、保存之前加入CSV读取计算逻辑:

def create
  @friend = Friend.new(friend_params)
  # 新增CSV处理逻辑开始
  if params[:friend][:File].present?
    # 读取上传的临时CSV文件,默认无表头
    csv_content = CSV.read(params[:friend][:File].tempfile, headers: false)
    # 提取第一列所有值转整数后求和,可根据你的实际处理需求修改此处逻辑
    calculate_total = csv_content.map { |row| row[0].to_i }.sum
    @friend.total = calculate_total
  end
  # 新增CSV处理逻辑结束
  respond_to do |format|
    if @friend.save
      format.html { redirect_to @friend, notice: "Friend was successfully created." }
      format.json { render :show, status: :created, location: @friend }
    else
      format.html { render :new, status: :unprocessable_entity }
      format.json { render json: @friend.errors, status: :unprocessable_entity }
    end
  end
end

4. 新增更新场景的CSV处理逻辑

修改update方法,支持编辑时重新上传CSV更新total值:

def update
  @friend.assign_attributes(friend_params)
  # 新增CSV处理逻辑开始
  if params[:friend][:File].present?
    csv_content = CSV.read(params[:friend][:File].tempfile, headers: false)
    calculate_total = csv_content.map { |row| row[0].to_i }.sum
    @friend.total = calculate_total
  end
  # 新增CSV处理逻辑结束
  respond_to do |format|
    if @friend.save
      format.html { redirect_to @friend, notice: "Friend was successfully updated." }
      format.json { render :show, status: :ok, location: @friend }
    else
      format.html { render :edit, status: :unprocessable_entity }
      format.json { render json: @friend.errors, status: :unprocessable_entity }
    end
  end
end
补充说明
  • 若你还未给friends表新增total字段,先执行以下命令生成迁移:
    rails g migration AddTotalToFriends total:integer
    rails db:migrate
    
  • 表单中的文件字段命名建议改为小写csv_file,避免大小写敏感带来的不必要问题,修改后对应调整强参数和逻辑中的参数名即可。
  • 可根据需求新增文件校验逻辑,比如限制仅允许.csv格式上传、校验文件行数符合要求等。

内容的提问来源于stack exchange,提问作者Diwanshu Tyagi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 11:36:08