当允许用户选择在/new
填写表单或上传包含多个对象的csv file
数据时,RESTful路由设计的最佳做法是什么?
为了简化控制器操作,我宁愿添加两条新路由,例如get :upload
和post :create_multiple
,以上传包含多个实体对象数据的CSV文件。
这是一个足够简单的情况,但我很好奇是否有人已经给它足够的思考来决定一个能够产生简单且易于测试的控制器动作的智能模式?
答案 0 :(得分:0)
<强>的RESTful 强>
我认为您需要超越CSV
并考虑系统如何运作的资源结构 - 如果您将CSV
文件视为Paperclip
附件,设置所需路线等的过程仍然相同 -
#config/routes.rb
resources :controller, path_names: {new: "upload"} do
collection do
post :create_multiple
end
end
这将为您提供以下控制器设置:
#app/controllers/your_controller.rb
Class YourController < ApplicationController
before_action :set_record, except: [:index, :new, :create]
def new
@model = Model.new
end
def create
@model = Model.new(model_params)
@model.save
end
def edit
end
def update
@model.update(model_params)
end
def index
@models = Model.all
end
def destroy
@model.destroy
end
def show
end
def create_multiple
end
private
def models_params
parmas.require(:model).permit(:params, :for, :object)
end
def set_record
@model = Model.find parmas[:id]
end
end
如果您想在后端操作CSV文件,您可以在模型中执行此操作 - 使用instance
/ class
方法或使用其他方法依赖