Ruby on rails 如何使用CSV头作为请求头在my API中上载CSV文件的内容

Ruby on rails 如何使用CSV头作为请求头在my API中上载CSV文件的内容,ruby-on-rails,api,csv,Ruby On Rails,Api,Csv,我知道如何通过使用模型中的has_one_将文件附加到我的请求来上载文件 但我的目标是上传CSV文件的内容,而不是文件本身。(csv文件还有一个我想使用的标题) 如何设置控制器和模型以启用此功能 一些背景信息:我正在使用ETL过程转换CSV文件,并希望在API中上载这些CSV文件的内容。将有许多大文件上传,我想避免手动更改文件 不过,对于这个问题,一个小例子就足够了: testfile1.csv name;age;gender max;23,m lisa;12;f gustavo;69;m be

我知道如何通过使用模型中的has_one_将文件附加到我的请求来上载文件

但我的目标是上传CSV文件的内容,而不是文件本身。(csv文件还有一个我想使用的标题) 如何设置控制器和模型以启用此功能

一些背景信息:我正在使用ETL过程转换CSV文件,并希望在API中上载这些CSV文件的内容。将有许多大文件上传,我想避免手动更改文件

不过,对于这个问题,一个小例子就足够了:

testfile1.csv

name;age;gender
max;23,m
lisa;12;f
gustavo;69;m
bernd;4;d
我看到了CSV文件的这种方法,但我不知道如何实现它供我使用

CSV.foreach(params[:file].path, headers: true) do |row|
  Model.create(name: row[0], age: row[1], gender: row[2])
end
“Model.create”是否创建了一个新模型,以便我在自己的模型中不需要姓名、年龄和性别,或者它是如何工作的? 我是否在服务中使用它? params[:file]是访问允许属性的方式吗


这是我在这里的第一个问题,我相当缺乏经验,我希望我包括所有需要的。提前谢谢

使用
foreach
方法可以迭代有问题的csv文件。是,
params[:file]
允许您访问该文件(如果该文件来自表单,则应为控制器上允许的参数)。根据该示例,
模型
类中的对象将具有属性-
名称
年龄
性别
Model.create
将使用提供的参数创建一个对象,并将其写入基础数据库<代码>行在这里是一个迭代变量<代码>行将遍历csv文件的所有行。仅当提供了
headers:true
时(如此处),才会读取标题

因此,在尝试了一点之后,我为感兴趣的人找到了一个解决方案,它可能不是最干净的,但似乎对我有效。“Testfilemodel”是我保存内容的另一个模型。我认为“文件名”可以删除

class Api::FileuploadsController < ApplicationController
    before_action :set_fileupload, only: [:show, :update, :destroy]
    require 'csv'
    def create
        @fileupload = csvmethod
    end

    private

    def file_params
        params.require(:fileupload).permit(:filename, :csvfile)
    end

    def csvmethod
        CSV.foreach(file_params[:csvfile].path, headers: true) do |row|
            Testfilemodel.create(name: row[0], age: row[1], gender: row[2])
        end
    end
    def set_fileupload
        @fileupload = Fileupload.find(params[:id])
    end
end
class Api::FileuploadsController
在“Testfilemodel”模型中,我只有基本的索引和显示方法来显示内容。
如果其他人也有同样的问题,希望这能有所帮助。

要使其起作用:
Model.create(姓名:行[0],年龄:行[1],性别:行[2])
您需要一个名为Model的模型,该模型具有这些属性
Model.create
这只是一个通用示例,如果您有一个名为Car的模型,那么您将执行
Car.create
操作,并且您需要模型响应这些属性。如果您想为您的模型提供灵活的模式,可能需要像MongoDB这样的NoSQL数据库。你试过什么了吗?谢谢你的快速回放。我目前正在使用postgresql。所以我需要在我的“汽车”模型中使用另一种创建方法?你能给我举一个如何实现CSV.foreach。。。在控制器中?谢谢你的回答,我仍然不知道如何在控制器中实现它。你能给我举个create方法的例子吗?