2009-06-15 16 views
12
redirect_to :controller=>'groups',:action=>'invite' 

लेकिन मुझे त्रुटि मिली क्योंकि रीडायरेक्ट_ईईटी विधि भेजने के लिए मैं इस विधि को 'POST' में बदलना चाहता हूं, कोई नहीं है: रीडायरेक्ट में विधि विकल्प मैं क्या करूँगा? क्या मैं इसे redirect_to के बिना कर सकता हूं।डाक विधि को रीडायरेक्ट करने के लिए रेल?

संपादित करें:

मैं समूहों में यह राशि/invite.html.erb

<%= link_to "Send invite", group_members_path(:group_member=>{:user_id=>friendship.friend.id, :group_id=>@group.id,:sender_id=>current_user.id,:status=>"requested"}), :method => :post %> 

यह लिंक कॉल group_members नियंत्रक में कार्रवाई बनाते हैं, और बाद बनाने कार्रवाई मैं समूह दिखाएगी/आमंत्रित करना चाहते हैं प्रदर्शन किया। group_id साथ html.erb (मेरा मतलब क्लिक करने के बाद 'भेजें आमंत्रित करते हैं' group_members बनाया जाएगा और फिर वर्तमान पृष्ठ दिखाया जाएगा) इस तरह:

redirect_to :controller=>'groups',:action=>'invite',:group_id=>@group_member.group_id 

बाद redirect_to अनुरोध वें GET विधि के साथ है, यह समूह में शो कार्रवाई कॉल करता है और आईडी के रूप में आमंत्रित करते हैं और इस त्रुटि

Couldn't find Group with ID=invite 

अपने समूह में कार्रवाई को आमंत्रित देना लेने

def invite 
@friendships = current_user.friendships.find(:all,:conditions=>"status='accepted'") 
@requested_friendships=current_user.requested_friendships.find(:all,:conditions=>"status='accepted'") 
@group=Group.find(params[:group_id]) 
end 

समाधान मैं POST पद्धति के साथ इस रीडायरेक्ट करने के लिए है लेकिन मुझे कोई रास्ता नहीं मिला।

बदसूरत समाधान: मैंने इस समस्या को हल किया जिसे मैं पसंद नहीं करता। मैं अभी भी इंतजार कर रहा हूं कि आपके पास उचित तरीके से समाधान है या नहीं।

मेरा समाधान 'आईडी के साथ समूह नहीं ढूंढ सका' आमंत्रण से छुटकारा पाने के लिए आमंत्रण के लिए मार्ग जोड़ रहा है।

routes.rb

map.connect "/invite",:controller=>'groups',:action=>'invite' 
में

में

कार्रवाई

redirect_to "/invite?group_id=#{@group_member.group_id}" 

मैं इस अंग्रेज़ी 'मैनुअल कार्यकर्ता विधि' में 'yontemi Amele' मई भाषा में समाधान फोन बनाने (मुझे लगता है कि)।

+0

आप इसे इस तरह क्यों चाहते हैं? क्या आप अधिक संदर्भ प्रदान कर सकते हैं? – marcgg

+0

सहमत हैं, हमें वास्तव में आपको एक अच्छा जवाब देने से पहले जो हासिल करने का प्रयास कर रहे हैं, उसके बारे में हमें और जानकारी चाहिए। –

+2

संभावित डुप्लिकेट [रेलवे में POST का उपयोग करके पुनर्निर्देशित \ _to] (http://stackoverflow.com/questions/985596/redirect-to-using-post-in-rails) –

उत्तर

9

ऐसा लगता है कि आप से कैसे फिसल कर रहे हैं पर हो जाता है कर रेल रूटिंग काम करता है। यह कोड:

redirect_to :controller=>'groups',:action=>'invite',:group_id=>@group_member.group_id 

एक यूआरएल बनाता है जो /groups/invite?group_id=1 जैसा कुछ दिखता है।

आपके routes.rb में मैपिंग के बिना, रेल राउटर इसे show क्रिया पर नक्शा करता है, invite नहीं। यूआरएल का invite हिस्सा params[:id] पर मैप किया गया है और जब यह डेटाबेस में उस रिकॉर्ड को खोजने का प्रयास करता है, तो यह विफल हो जाता है और आपको वह संदेश मिलता है जो आपको मिलता है।

map.resources :groups 

आप invite के लिए एक कस्टम कार्रवाई जोड़ने की जरूरत:

map.resources :groups, :member => { :invite => :get } 

फिर अपने संदर्भ बदल

आप RESTful मार्गों का उपयोग कर रहे हैं, तो आप पहले से ही एक map.resources लाइन है कि इस तरह दिखता है #invite विधि में केवल params[:id] का उपयोग करने के लिए।

31

उत्तर यह है कि आप redirect_to का उपयोग कर पोस्ट नहीं कर सकते हैं।

यह वह जगह है करता है क्योंकि क्या redirect_to बस ब्राउज़र है जो बदले में गंतव्य URL हो जाता है एक HTTP 30x रीडायरेक्ट हैडर भेज रहा है, और ब्राउज़रों केवल रीडायरेक्ट

+4

हाँ मुझे यह मिला लेकिन हल करने का कोई तरीका है redirect_to के बिना या बिना मेरी समस्या? –

5

मुझे एक सेमी-वर्कअराउंड मिला जो मुझे रेल 3 में होने के लिए जरूरी था। मैंने एक मार्ग बनाया जो उस नियंत्रक में विधि को कॉल करेगा जिसके लिए एक पोस्ट कॉल की आवश्यकता होती है। जैसे कि "route.rb" में एक पंक्ति,:

match '/create', :to => "content#create" 

यह शायद बदसूरत है, लेकिन हताश बार हताश उपायों के लिए कहते हैं। बस सोचा कि मैं साझा करूंगा।

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