在 Ruby on Rails 中,使用 smarter_csv
gem 可以方便地处理 CSV 文件,并将其数据批量导入到数据库中。以下是一个使用 smarter_csv
为 API 批量创建记录的示例步骤。
首先,确保在您的 Gemfile 中添加 smarter_csv
:
gem 'smarter_csv'
然后运行 bundle install
来安装它。
接下来,您需要创建一个 API 控制器来处理 CSV 文件的上传和处理。假设您要导入的模型是 User
,您可以创建一个 UsersController
。
rails generate controller Api::Users
在 config/routes.rb
中,添加一个路由来处理 CSV 上传:
namespace :api do
resources :users do
collection do
post :import
end
end
end
在 app/controllers/api/users_controller.rb
中,添加导入逻辑:
module Api
class UsersController < ApplicationController
def import
if params[:file].nil?
render json: { error: 'No file provided' }, status: :unprocessable_entity and return
end
begin
# 使用 SmarterCSV 处理 CSV 文件
options = { key_mapping: { name: :name, email: :email } } # 根据 CSV 文件的列名进行映射
SmarterCSV.process(params[:file].path, options) do |chunk|
# 批量创建用户
User.insert_all(chunk.map { |row| row[:data] })
end
render json: { message: 'Users imported successfully' }, status: :ok
rescue => e
render json: { error: e.message }, status: :unprocessable_entity
end
end
end
end
确保您的 CSV 文件格式正确。例如,假设您的 CSV 文件内容如下:
name,email
John Doe,john@example.com
Jane Smith,jane@example.com
您可以使用 Postman 或 cURL 测试 API。以下是使用 cURL 的示例:
curl -X POST http://localhost:3000/api/users/import -F "file=@path/to/your/file.csv"
在实际应用中,您可能需要添加更多的错误处理和数据验证。例如,您可以在插入之前检查电子邮件是否唯一,或者在处理 CSV 时捕获特定的错误。
smarter_csv
还提供了许多其他选项,例如:
chunk_size
选项处理大文件。以下是完整的 UsersController
示例代码:
module Api
class UsersController < ApplicationController
def import
if params[:file].nil?
render json: { error: 'No file provided' }, status: :unprocessable_entity and return
end
begin
options = { key_mapping: { name: :name, email: :email } }
SmarterCSV.process(params[:file].path, options) do |chunk|
User.insert_all(chunk.map { |row| row[:data] })
end
render json: { message: 'Users imported successfully' }, status: :ok
rescue => e
render json: { error: e.message }, status: :unprocessable_entity
end
end
end
end
领取专属 10元无门槛券
手把手带您无忧上云