2010-05-04 21 views
5

पर निर्भर करता है मैं उपयोगकर्ता की प्रोफ़ाइल को संपादित करने के लिए रेल मार्ग बनाना चाहता हूं।रेल उपयोगकर्ता वर्तमान उपयोगकर्ता

इसके बजाय का उपयोग करने/उपयोगकर्ताओं/होने के: आईडी/संपादन, मैं एक यूआरएल करना चाहते हैं की तरह/edit_profile

यह edit_profile में/उपयोगकर्ताओं/{उपयोगकर्ता के/चला है कि एक गतिशील मार्ग बनाने के लिए संभव है id}/संपादित करें, या मुझे नियंत्रक में चीज़ करना चाहिए या?

+0

मुझे लगता है कि यह एक नामित मार्ग/नियंत्रक नौकरी है। –

+0

क्या आपके लिए इसका मतलब क्या है इसका थोड़ा सा विस्तार करना संभव है? धन्यवाद! – Lowgain

उत्तर

4

आप इस कार्य के लिए एक अलग नियंत्रक बनाने के लिए चाहते हो सकता है, लेकिन आप कर सकते थे अल नामक एक नामित मार्ग देना होगा इसलिए users_controller का उपयोग जारी रखने और बस की जाँच है कि क्या वहाँ एक params[:id] सेट:

def edit 
    if params[:id] 
    @user = User.find(params[:id]) 
    else 
    @user = current_user 
    end 
end 

लेकिन आप को ध्यान देना चाहिए आप अभी भी map.resources :users मार्ग है, तो यह है कि सामान्य रूप से /usersindex कार्रवाई करने के लिए मार्गों और नहीं show। लेकिन आप उसके लिए एक अलग ढंग से कहा जाता विलक्षण मार्ग सेट कर सकते हैं:

map.resources :users 
map.resource :profile, :controller => "users" 

इस तरह /users सभी उपयोगकर्ताओं की सूची होगी, /users/:id किसी भी उपयोगकर्ता दिखाते थे और /profileshow वर्तमान में उन पेज में लॉग इन दिखाएगी। अपनी प्रोफ़ाइल संपादित करने के लिए आप '/ प्रोफ़ाइल/संपादन' कहेंगे।

get 'edit_profile', to: 'users#edit' 

तो www.yoursite के लिए रास्ते में, जब कोई www.yoursite.com/edit_profile को जाता है, यह होगा:

+0

धन्यवाद! मैंने एक अलग यूआरएल संरचना का उपयोग किया, लेकिन मैं जो चाहता था उसे पूरा करने के लिए आपके उत्तर का उपयोग करने में सक्षम था! – Lowgain

3

चूंकि एक मार्ग और नियंत्रक दो अलग-अलग उद्देश्यों की सेवा करता है, तो आपको दोनों की आवश्यकता होगी।

नियंत्रक लिए, मान लें कि आप एक सत्र में उपयोगकर्ता आईडी भंडारण कर रहे हैं, तो आप सिर्फ अपने संपादित विधि हो सकता था की तरह कुछ कार्य करें:

:

def edit 
    @user = User.find(session[:user_id]) 
end 

फिर एक मार्ग है कि तरह दिखता है

map.edit_profile "edit_profile", :controller => "users", :action => "edit" 

इस मार्ग आप edit_profile_path

0

टॉमस Markauskas का जवाब काम कर सकता था, लेकिन यहां रेल गाइड से अपने प्रश्न का उत्तर है .com/उपयोगकर्ताओं/संपादन।

फिर, अपने नियंत्रक में आप

@user = User.find(session[:current_user_id]) 

आपको लगता है कि सत्र चर सेट जब किसी में लॉग मान लिया जाये साथ उपयोगकर्ता पहुँच सकते हैं। इसके अलावा, भूल नहीं है अगर वे प्रवेश किया हो जाँच करने के लिए। यह होगा यदि आप संसाधन रूटिंग (रेल डिफ़ॉल्ट) का उपयोग करते हैं या नहीं करते हैं तो काम करें।

स्रोत: http://guides.rubyonrails.org/routing.html

0

रूप

get '/users/:id/edit', to: 'users#edit', as: 'edit_profile' 

के रूप में मार्ग बनाने के लिए इस लिंक पर भाग में समझाया 'मुश्किल तरीके से':

http://augustl.com/blog/2009/styling_rails_urls/

यूआरएल

हो जाएगा
/users/edit_profile 

क्योंकि आईडी अब URL में नहीं है, इसलिए हमें कोड को थोड़ा बदलना होगा।

class User < ActiveRecord::Base 
    before_create :create_slug 

    def to_param 
    slug 
    end 

    def create_slug 
    self.slug = self.title.parameterize 
    end 
end 

जब कोई उपयोगकर्ता बनाया जाता है, तो स्लॉग कॉलम में डेटाबेस में शीर्षक का URL अनुकूल संस्करण डेटाबेस में संग्रहीत होता है।

बेहतर समझ के लिए किसी भी घर controler में

http://blog.teamtreehouse.com/creating-vanity-urls-in-rails

0

यह लिखने नीचे दिए गए लिंक पढ़ें।

डीईएफ़ routes.rb फ़ाइल में set_roots

if current_user  
    redirect_to dashboard_home_index_path 
else  
    redirect_to home_index_path 
end  

अंत

जड़: करने के लिए => 'घर # set_roots'

मैच "/ find_roots" => "घर #set_roots "

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