2012-11-06 22 views
6

पर विभिन्न रूट पथ सेट करें मैंने एक devise उपयोगकर्ता मॉडल बनाया है।डेविस प्रति उपयोगकर्ता प्रकार

  • ग्राहक
  • व्यवस्थापक

मैं दो 'सामान्य' मॉडल बनाने के बिज कार्य किया है उसे: ग्राहक और व्यवस्थापक वहाँ उपयोगकर्ता के 2 प्रकार हैं। ये दो मॉडल उपयोगकर्ता मॉडल से विरासत में हैं, जैसे:

class Customer < User 

क्या कोई जानता है कि मैं प्रति प्रकार के रूट रूट को कैसे सेट कर सकता हूं। मैं कुछ इस तरह हैं:

authenticated :customer do 
    root :to => "customer/dashboard#index" 
end 

authenticated :admin do 
    root :to => "admin/dashboard#index" 
end  

अद्यतन:

root :to => "pages#home", :constraints => lambda { |request|!request.env['warden'].user} 
root :to => 'customer/dashboard#index', :constraints => lambda { |request| request.env['warden'].user.type == 'customer' } 
root :to => 'admin/dashboard#index', :constraints => lambda { |request| request.env['warden'].user.type == 'admin' } 
+0

कृपया अपने अपडेट किए गए उत्तर को अपने प्रश्न के बाहर और इसके उत्तर के रूप में जोड़ें। – Noz

+0

मैं पहले 8 घंटों के लिए अपने प्रश्न का उत्तर नहीं दे सकता ... –

उत्तर

2

क्या तुम कर सकते हो एक भी रूट पथ है, कहते हैं कि home#index और इसी में:

मैं समस्या हल हो गया है नियंत्रक कार्रवाई उनके उपयोगकर्ता प्रकार के आधार पर एक रीडायरेक्ट प्रदर्शन करती है।

उदाहरण के लिए:

def index 
    if signed_in? 
    if current_user.is_a_customer? 
     #redirect to customer root 
    elsif current_user.is_a_admin? 
     #redirect to admin root 
    end 
    end 
end 
+0

आपके उत्तर के लिए धन्यवाद। आपके दृष्टिकोण के साथ 1 समस्या: ग्राहक रूट और व्यवस्थापक रूट डोमेन.com/ पर नहीं होगा। यह उस डोमेन में domain.com/customer और domain.com/admin –

+0

जैसा कुछ बन जाएगा, आपको इन शर्तों (is_a_customer? और is_a_admin?) को अपनी रूट विधि में स्थानांतरित करने की आवश्यकता है (सामान्य विधि जिसे आप दोनों प्रकार के उपयोगकर्ताओं के लिए मुकदमा करना चाहते हैं) और हस्ताक्षर किए गए उपयोगकर्ता – Prem

5

हालांकि एक पुराने सवाल है, वहाँ कोई जवाब नहीं है और यह दूसरों के लिए उपयोगी हो सकता है।

रेल 3.2 में (मैं इसे कम कुछ भी साथ कभी नहीं परीक्षण किया है) आप अपने routes.rb फ़ाइल

authenticated :admin_user do 
    root :to => "admin_main#index" 
end 

में ऐसा कर सकते हैं तो आगे नीचे अपने सामान्य जड़ मार्ग की है।

हालांकि, यह रेल 4 में काम नहीं करता है क्योंकि यह Invalid route name, already in use: 'root' (ArgumentError) देता है (जैसा कि मैंने अभी पाया है और जब मैं इस प्रश्न में आया था तो समाधान ढूंढ रहा था), अगर मुझे ऐसा करने का कोई तरीका पता चलता है रेल 4 में मैं अपने जवाब अपडेट करेगा

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

ठीक है तो रेल 4 के लिए फिक्स बहुत सरल है, लेकिन नहीं बल्ले से दूर तो स्पष्ट सही। इस तरह:: तुम सब करने की जरूरत है एक के रूप में जोड़कर दूसरे रूट मार्ग एक नामित मार्ग बनाने है

authenticated :admin_user do 
    root :to => "admin_main#index", as: :admin_root 
end 

इस here दस्तावेज लेकिन ध्यान दें कि यह केवल एक अस्थायी ठीक तरह लगता है और इसलिए फिर से बदल सकती है भविष्य में

+0

के अनुसार रिकॉर्ड्स रिकॉर्ड अब रेल 5 में काम नहीं करते हैं :( – wegginho

0

after_sign_in_path_for का उपयोग करना उचित होना चाहिए। तो इसे अपने application_controller.rb:

def after_sign_in_path_for(resource) 
    if resource.type == 'customer' 
    your_desired_customer_path 
    else 
    your_desired_admin_path 
    end 
end 
संबंधित मुद्दे