2011-05-24 13 views
7

मुझे अपने उपयोगकर्ताओं को पिछले पृष्ठ पर रीडायरेक्ट करने में कुछ ट्रबल है।वापस रीडायरेक्ट करना अब काम नहीं करता है

यहां फिल्म नियंत्रक में एक अद्यतन विधि का एक उदाहरण है।

def update 
    @movie = Movie.find(params[:id]) 
    if @movie.update_attributes(params[:movie]) 
    flash[:notice] = "The given movie is now updated." 
    end 
    respond_with(@movie, location: :back) 
end 

मुझे यह त्रुटि मिल रही है।

undefined method 'hash_for_back_url' for #<Module:0x00000103eeaaa8>respond_with लाइन पर।

मैं रूबी 1.9 के साथ रेल 3.1 आरसी 1 का उपयोग कर रहा हूं।

ऐसा कुछ करने पर यह काम करता है।

respond_with(@movie, location: request.referer)

किसी को भी जानता कि क्यों :back तर्क काम नहीं करेगा?

+0

यह नहीं होना चाहिए: location =>: back? – jaydel

+0

@jaydel - आप रूबी 1.9 के साथ नए वाक्यविन्यास का उपयोग कर सकते हैं। –

+0

पुराने सिंटैक्स को यह सुनिश्चित करने के लायक हो सकता है कि यह सुनिश्चित न हो ... –

उत्तर

8

एकमात्र समाधान है कि मेरे लिए काम किया request.referer का उपयोग किया गया।

समाधान # 1

respond_with(@comment, location: request.referer) 

समाधान # 2

class ApplicationController < ActionController::Base 
    helper_method :redirect_back 

    def redirect_back(options = {}) 
    if request.referer 
     redirect_to request.referer, options 
    else 
     redirect_to root_path, options 
    end 
    end 
end 

# View/controller 

redirect_back notice: "Sending you back ... hopefully" 
+0

या पथ को वापस करने के लिए उस सहायक को सरल बनाएं और answer_with के साथ उपयोग करें: def redirect_back_path request.referer || root_path अंत – nruth

0

उस मामले respond_with में उम्मीद कर रही है:

  • एक सूचना पर पुन: निर्देशित: स्थान की तरह respond_with(@movie, :location => movie_url(@movie))

    आप शायद का उपयोग करना चाहिए यह तरीकों में से एक के बजाय एक यूआरएल सहायक विधि का परिणाम redirect_to @movie के साथ पृष्ठ, जो redirect_to movie_path(@movie)

  • render :action => :edit के साथ अद्यतन डेटा के साथ फिर से फ़ॉर्म प्रस्तुत करें (संपादित करें क्रिया उपयोग का प्रतिनिधित्व करें घ प्रपत्र प्रदर्शित करने के लिए)

+0

यह समाधान 'MoviesController # show' विधि पर निर्भर करता है, जो मेरे मामले में मौजूद नहीं है। समस्या यह है कि मुझे नहीं पता कि उपयोगकर्ता को 'मूवी कंट्रोलर # एडिट' पृष्ठ कैसे मिला, लेकिन मैं अभी भी उपयोगकर्ता को मूल पृष्ठ पर रीडायरेक्ट करना चाहता हूं। उदाहरण के लिए मैं अपनी साइट पर 10 अलग-अलग स्थानों में एक संपादन लिंक कर सकता हूं। – Oleander

+0

संपादन विधि पर रेफरर को सहेजें, और सत्र या छुपा फ़ील्ड के माध्यम से इसे अद्यतन विधि में पास करें। फिर यदि आपको @movie ऑब्जेक्ट की आवश्यकता है तो इसे रीडायरेक्ट_to या answer_with में उपयोग करें। –

+0

मुझे अभी भी लगता है कि यह स्वचालित रूप से काम करना चाहिए। बस 'स्थान का उपयोग कर:: back' पर्याप्त होना चाहिए। – Oleander

0

कैसे इस बारे में:

respond_with @movie do |format| 
    format.html { redirect_to :back } 
end 

आपको सामान्य HTML प्रत्युत्तर ओवरराइड करने देता है ताकि आप कर सकते हैं किका प्रयोग करें

संबंधित मुद्दे