管理中的 AbstractController::DoubleRenderError [英] AbstractController::DoubleRenderError in Admin
问题描述
我正在从事狂欢商务,我正在尝试调整 active_sale_controller 中的几个操作.我有一些条件,如果条件失败,我将redirecting_to (:back) 否则我将进行下一步.我现在面临的问题是我在同一个动作中使用了 redirected_to (:back) 两次,而且我在同一个动作中又使用了一个 redirected_to 到其他控制器,浏览器显示了一个错误,内容为
I am working on spree commerce, I am trying to tweak couple of actions in the active_sale_controller. I have some conditions, if the condition fails I am redirecting_to (:back) else I am proceeding to next step. The problem I am facing right now is I have used redirected_to (:back), twice in the same action and also I have one more redirected_to to some other controller in the same action, the browser shows a error which is says
"Render and/or redirect were called multiple times in this action. Please note that you may only call render OR redirect, and at most once per action. Also note that neither redirect nor render terminate execution of the action, so if you want to exit an action after redirecting, you need to do something like "redirect_to(...) and return"."
这是我的代码
when "2"
st_days = DateTime.strptime("#{start_date}","%d/%m/%Y %H:%M:%S")
ed_days = DateTime.strptime("#{end_date}","%d/%m/%Y %H:%M:%S")
ps = PoSale.where(:active_sale_id => @active_sale.id, :event_name => @taxon_name,:st_date => @start_date, :ed_date => @end_date).last
if ((st_days >= ps.st_date and st_days <= ps.ed_date) or ( ed_days >= ps.st_date and ed_days <= ps.ed_date))
redirect_to (:back), :notice => "problem with the start_date and end_date"
else
PoSale.create(:active_sale_id => params[:id], :event_name => params[:active_sale]["taxon_name"], :st_date => DateTime.strptime("#{start_date}","%d/%m/%Y %H:%M:%S"), :ed_date => DateTime.strptime("#{end_date}","%d/%m/%Y %H:%M:%S"))
end
when "3"
puts "Inside 3"
puts "*"*20
#hidesd = DateTime.parse(params[:hide_start_date].split("+")[0])
#hideed = DateTime.parse(params[:hide_end_date].split("+")[0])
# hideed = DateTime.strptime("#{hide_end_date}","%d/%m/%Y %H:%M:%S")
puts "*"*20
#puts "Parameters:#{hidesd}"
#puts hideed
a_sale_id=params[:id].to_i
#PoSale.where("active_sale_id = 310 and st_date = '2012-07-05 03:03:00' and ed_date ='2012-07-12 08:03:00'")
st_days = DateTime.strptime("#{start_date}","%d/%m/%Y %H:%M:%S")
ed_days = DateTime.strptime("#{end_date}","%d/%m/%Y %H:%M:%S")
diff = (st_days.to_date - ed_days.to_date).to_i
if diff > 10
redirect_to (:back), :notice => "more then 10 days not hapenning"
else
ps = PoSale.where(:active_sale_id => a_sale_id, :event_name => @taxon_name, :st_date => @start_date, :ed_date => @end_date).last #where("active_sale_id =#{a_sale_id} and st_date like ? and ed_date like ?",hidesd.strftime("%Y-%m-%d %H:%M:%S"),hideed.strftime("%Y-%m-%d %H:%M:%S")).last #use find
ps.update_attributes(:event_name => params[:active_sale]["taxon_name"], :st_date => DateTime.strptime("#{start_date}","%d/%m/%Y %H:%M:%S"), :ed_date => DateTime.strptime("#{end_date}","%d/%m/%Y %H:%M:%S"))
end
请帮帮我!!!
推荐答案
redirect_to
不会停止 action 方法的执行,因此如果您调用它并稍后调用 render
或另一个 redirect_to
你会得到双重渲染异常.有一个相当简单的修复方法,只需调用 并返回
.例如
redirect_to
does not stop execution of the action method so if you call it and later call render
or another redirect_to
you will get the double render exception. There is a fairly simple fix, just call and return
. e.g.
redirect_to (:back), :notice => "problem with the start_date and end_date" and return
请参阅Rails 指南.
这篇关于管理中的 AbstractController::DoubleRenderError的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!