2012-12-10 13 views
7

मेरे पास एक ब्लॉगिंग एप्लिकेशन है जिसमें पोस्ट्स नियंत्रक में vote कार्रवाई के माध्यम से वोट प्राप्त कर सकते हैं। क्योंकि मैं सूचकांक दोनों में वोटिंग की अनुमति देता हूं और विचार दिखाता हूं, वोट के बाद, redirect_to :back नीचे दिया गया है।रीडायरेक्ट_to पर एक एंकर कैसे जोड़ें: वापस

def vote 
    # voting logic goes here 
    redirect_to :back 
end 

यह मुझे सही पृष्ठ पर रीडायरेक्ट करता है, लेकिन मैं पृष्ठ के भीतर विशिष्ट पोस्ट पर रीडायरेक्ट करना चाहता हूं। ऐसा करने के लिए, मैंने अपने पोस्ट आंशिक div में एक पहचान एंकर जोड़ा।

<div id="post_<%= post.id %>"> 
    <%= post.content %> 
</div> 

मैं इसे अपने redirect_to :back में कैसे संदर्भित कर सकता हूं? मैंने नीचे की कोशिश की, जो काम नहीं करता है।

# this doesn't work! 
redirect_to :back, anchor: "post_#{@post.id}" 

वैकल्पिक रूप से, यदि मैं शो और इंडेक्स दृश्यों के लिए कोई खंड का उपयोग करना चाहता था, तो मैं यह कैसे कर सकता हूं? मैंने नीचे की कोशिश की, जो undefined method 'current_page' for VocabsController देता है।

#this doesn't work! 
if current_page?(posts_path) 
    redirect_to posts_path(anchor: "post_#{@post.id}" 
else 
    redirect_to @post 
end 

उत्तर

0

मैं इसके बजाय जावास्क्रिप्ट का उपयोग कर समाप्त हुआ।

posts_controller.rb

def vote 
    @post = Post.find(params[:id]) 
    #voting logic 
    respond_to do |format| 
    format.html { redirect_to :back } 
    format.js 
    end 
end 

पदों/_post.html.erb

<div class="post_partial" id="post_<%= post.id %>"> 
    <%= post.content %> 
    <div id="vote_button_<%= post.id %>"> 
    <%= link_to "up", vote_path, method: "post", remote: true %> 
    </div> 
</div> 

पदों/vote.js.erb

$('#post_<%= @post.id %>').html('<%= j render @post %>'); 
1

संपादित करें: ठीक है, मेरा बुरा, भ्रमित हो गया। आप इस पर गौर करना चाहिए:

What's the right way to define an anchor tag in rails?

EDIT2:

समस्या आप है कि आप एक नियंत्रक के अंदर और एक दृश्य के अंदर नहीं एक सहायक बुला रहे हैं है।

मैं तुम्हें view_context विधि

http://jhonynyc.tumblr.com/post/5361328463/use-view-context-inside-rails-3-controller

+0

हाय @Kevin। इनपुट के लिए धन्यवाद। ऐसा लगता है कि मेरा पहला विकल्प (': back' का उपयोग करके) काम नहीं करेगा, क्योंकि यह एंकर स्वीकार नहीं करेगा। दूसरा विकल्प (अगर खंड का उपयोग कर रहा है) ठीक लगता है, और view_context विधि काम करता है। मैं कैसे कहूंगा, "अगर आपने इंडेक्स पेज पर एक पोस्ट के लिए वोट दिया"? 'Current_Page का उपयोग करना? (Posts_path)' काम नहीं करता है, शायद इसलिए कि इसे किसी भिन्न क्रिया (यानी इंडेक्स एक्शन नहीं) के भीतर बुलाया जाता है। मैं कैसे कह सकता हूं, "अगर मैं इंडेक्स पेज पर एक पोस्ट के लिए वोट देता हूं, तो इंडेक्स पेज पर उस पोस्ट पर रीडायरेक्ट करें, अन्यथा उस पोस्ट के शो पेज पर रीडायरेक्ट करें" – umezo

+2

मुझे लगता है कि आप जो करना चाहते हैं वह है कि उसे रीडायरेक्ट करने वाली कार्रवाई का उपयोग न करें उपयोगकर्ता लेकिन वास्तव में उपयोगकर्ता को कहीं भी रीडायरेक्ट किए बिना पोस्ट के लिए वोट देना पड़ता है (उसी पृष्ठ पर रहना जहां उसने मतदान किया)। तो मेरी सलाह एक साधारण AJAX लिंक का उपयोग करना है: यह उपयोगकर्ता के वर्तमान दृश्य को बदले बिना दिए गए विधि को निष्पादित करता है। संपादित करें: यहां वह कोड है जिसकी आपको आवश्यकता होगी '<% = link_to_function" वोट दें "," $ .ajax ({type: 'GET', url: '/ your_controller/voteup /'}) "%>' –

+0

अच्छी बात। जो मैंने किया वह उतना ही कम है। इनपुट के लिए धन्यवाद। – umezo

10

रेल पुन: निर्देशित तंत्र में गहरी जांच के लिए प्रोत्साहित करते हैं, :back बस जो कुछ भी HTTP_REFERER वातावरण चर में (या तो इस वैरिएबल में कुछ भी नहीं एक त्रुटि उठाना) को अनुप्रेषित का मतलब है। तो redirect_to :back से पहले अपने नियंत्रक में यह लाइन जोड़ें: env["HTTP_REFERER"] += '#some-id', यह करना चाहिए।

+0

धन्यवाद @ अहमद। मैं इसे संभालने के लिए जावास्क्रिप्ट का उपयोग कर समाप्त हो गया। लेकिन जब मुझे इसकी आवश्यकता होती है तो निश्चित रूप से इसे ध्यान में रखेगा! – umezo

+0

क्या कोई जानता है कि यह रेल 2 में कैसे किया जा सकता है। – olleicua

+7

ने अपना खुद का प्रश्न उत्तर दिया: 'redirect_to request.referer + '# some-id'' – olleicua

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