我正在进行狂欢商务,我正在尝试调整active_sale_controller中的几个动作。我有一些条件,如果条件失败,我会重定向(后退),否则我将继续下一步。我现在面临的问题是我在同一个动作中使用了redirected_to(:back)两次,并且在同一个动作中我还有一个redirected_to到另一个控制器,浏览器显示错误,表示
"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
请帮帮我!!!
答案 0 :(得分:8)
redirect_to
不会停止执行操作方法,因此如果您调用它并稍后调用render
或其他redirect_to
,您将获得双重渲染异常。有一个相当简单的修复,只需调用and return
。 e.g。
redirect_to (:back), :notice => "problem with the start_date and end_date" and return
请参阅Rails guide中的'避免双重渲染例外'。