मैं एक विलक्षण नेस्टेड प्रोफ़ाइल संसाधन के साथ एक सरल उपयोगकर्ता मॉडल है तो मेरी routes.rb में मेरे पास है:रेल नेस्टेड एकवचन संसाधन रूटिंग
edit_user_profile GET /users/:user_id/profile/edit(.:format) {:action=>"edit", :controller=>"profiles"}
user_profile GET /users/:user_id/profile(.:format) {:action=>"show", :controller=>"profiles"}
user_profile PUT /users/:user_id/profile(.:format) {:action=>"update", :controller=>"profiles"}
मैं:
resources :users do
resource :profile, :only => [:edit, :update, :show]
end
यह उम्मीद मार्गों उत्पन्न करता है हमने एक सरल नियंत्रक अद्यतन विधि बनाई है जो मॉडल को अद्यतन करता है और फिर सफल अद्यतन पर पुनर्निर्देशित करता है:
def update
@profile = Profile.find_by_user_id(params[:user_id])
@user = User.find_by_id(params[:user_id])
respond_to do |format|
if @profile.update_attributes(params[:profile])
format.html { redirect_to(user_profile_path(@user, @profile), :notice => 'Profile was successfully updated.') }
else
# ...
end
end
end
समस्या यह है कि फ़ॉर्म जमा होने के बाद, फॉर्म mydomain.com/users/4/profile.22 पर रीडायरेक्ट करता है जहां 22 प्रोफ़ाइल की आईडी होती है। स्पष्ट रूप से यह नियंत्रकों को भ्रमित करता है क्योंकि रूटिंग प्रारूप के रूप में '22' को व्याख्या करती है।
मेरा प्रश्न, कैसे मैं इस बजाय mydomain.com/users/4/profile को अनुप्रेषित करने के लिए मिलता है? मैं कोई प्रभाव नहीं करने के लिए redirect_to स्टेटमेंट पर निम्न रूपों की कोशिश की है, वे एक ही गलत url में सभी परिणाम:
redirect_to(user_profile_path(@user), ...)
redirect_to(user_profile_path(@user, @profile), ...)
redirect_to([@user, @profile], ...)
redirect_to(@profile, ...)
इतना ही नहीं, का उपयोग करते हुए 'user_profile_path (@user)' कहीं और सही यूआरएल पैदा करता है।
कोई विचार? ओह, और मैं रेल 3.0.0 और रूबी 1.9.2 का उपयोग कर रहा हूं अगर यह मदद करता है।
मुझे यह समस्या भी है।रूटिंग यह जानकर काफी समझदार होनी चाहिए कि यह @profile से निपट रहा है जो एकवचन है और आईडी को यूआरएल में नहीं डालता है। मुझे उम्मीद है कि इस के आसपास काम करने का एक तरीका है क्योंकि मैं पॉलिमॉर्फिक यूआरएल के ज़रूरत से बाहर हूं क्योंकि मुझे नहीं पता कि मूल वस्तु में से कौन सा वर्ग है (आपके मामले में मुझे नहीं पता कि @user जरूरी है उपयोगकर्ता वर्ग)। –
यह एक लंबा स्टंटिंग है [रेल में बग] (https://github.com/rails/rails/issues/1769) –