我有以下create
动作:
def create
@report = Report.new(params[:report])
@file = params[:report][:data_file]
res = @report.get_report(@file, @report.year, @report.month)
file = open('report.pdf','wb')
file.write(res.body)
@report.file = file
respond_to do |format|
if @report.save
format.html { redirect_to @report, notice: 'Report was successfully created.' }
format.json { render json: @report, status: :created, location: @report }
else
format.html { render action: "new" }
format.json { render json: @report.errors, status: :unprocessable_entity }
end
end
end
但是,存储在res
变量中的 HTTP 响应可以有一个200
代码,或者一个400
指示错误请求的代码。我希望如果res.code
是 400,它也会返回到new
带有警告消息的操作。
如果如下所示,我尝试在 response_to 中包含该条件,但没有成功。似乎在创建实例后它重定向到edit
操作。这没有道理。
respond_to do |format|
if @report.save and res.code == 200
format.html { redirect_to @report, notice: 'Report was successfully created.' }
format.json { render json: @report, status: :created, location: @report }
else
format.html { render action: "new" }
format.json { render json: @report.errors, status: :unprocessable_entity }
end
end
正确的方法是什么?