1

私はスプリー コマースに取り組んでいます。active_sale_controller でいくつかのアクションを微調整しようとしています。いくつかの条件があります。条件が失敗した場合は、redirecting_to (:back) です。それ以外の場合は、次のステップに進みます。私が今直面している問題は、redirected_to (:back) を同じアクションで 2 回使用したことと、同じアクションで別のコントローラーに別の redirected_to をもう 1 つ使用したことです。ブラウザーに次のエラーが表示されます。

"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

親切に私を助けてください!!!

4

1 に答える 1

12

redirect_toアクションメソッドの実行を停止しないため、それを呼び出して後でrenderまたは別のメソッドを呼び出すとredirect_to、二重レンダリング例外が発生します。を呼び出すだけのかなり簡単な修正方法がありますand return。例えば

redirect_to (:back), :notice => "problem with the start_date and end_date" and return

Rails ガイドの「二重レンダリング例外の回避」を参照してください。

于 2012-07-21T10:58:12.290 に答える