2012-01-17 3 views
8

मैं एक ऐप बनाने के लिए रेल 3 और डेविस का उपयोग कर रहा हूं जहां उपयोगकर्ता वेबसाइट पर आते हैं और एक होमपेज दिखाया जाता है जिसमें लॉगिन और साइनअप फॉर्म होता है। इस पृष्ठ का अपना नियंत्रक ("मुखपृष्ठ") है तो यह मार्गरेल 3 डब्ल्यू/डेविस: उपयोगकर्ता को प्रमाणित किया गया है या नहीं, इस पर आधारित दो अलग-अलग होमपेज कैसे सेट करें?

root :to => "homepage#index" 

मैं एक अलग होमपेज पर प्रदर्शित करने के लिए उपयोगकर्ताओं को पहले से लॉग इन कर रहे हैं चाहते है। यह

root :to => "dashboard#index" 
के लिए रूट बिंदु होने के लिए खाते हैं

क्या रूट.आरबी में सशर्त मार्ग रखने का कोई तरीका है, जो मुझे यह जांचने की अनुमति देगा कि उपयोगकर्ता को उन होमपेजों में से किसी एक को रूट करने से पहले प्रमाणित किया गया है या नहीं?

मैंने निम्नलिखित कोड का उपयोग करने की कोशिश की लेकिन अगर मैं लॉग इन नहीं हूं, तो मुझे लॉग इन करने के लिए कहता है, तो स्पष्ट रूप से केवल पहला मार्ग काम करता है।

authenticate :user do 
    root :to => "dashboard#index" 
end 
    root :to => "homepage#index" 

इसके अलावा, मैं यूआरएल दोनों ही मामलों में www.example.com ध्यान खींचना चाहते हैं, ताकि www.example.com/dashboard/index और www.example.com/homepage/index कभी नहीं में प्रदर्शित ब्राउज़र।

धन्यवाद दस लाख !!!

उत्तर

13

इस प्रयास करें, यह वार्डन/वसीयत हालांकि के लिए विशिष्ट है।

root to: "dashboard#index", constraints: lambda { |r| r.env["warden"].authenticate? } 
root to: "homepage#index" 
+0

बहुत बहुत धन्यवाद @ ब्रैडली, यह मुझे मार रहा था :) –

+0

मैं वही करता हूं, लेकिन उपयोगकर्ता में लॉग इन किया गया है और उपयोगकर्ता में लॉग इन नहीं किया गया है डैशबोर्ड # इंडेक्स –

+1

चेतावनी: यह रेल 4 के साथ काम नहीं करता है, आपको यह कहते हुए एक त्रुटि मिलती है: 'अमान्य मार्ग का नाम, पहले से उपयोग में:' root'' – Happynoff

5

अपने HomeController में:

def index 
    if !user_signed_in? 
    redirect_to :controller=>'dashboard', :action => 'index' 
    end 
end 
+0

उत्तर @negarnil के लिए धन्यवाद। बात यह है कि, मैंने इस विकल्प की कोशिश की लेकिन यह यूआरएल को फिर से लिखना नहीं है। मैं www.example.com दोनों पृष्ठों को इंगित करना चाहता हूं ताकि www.example.com/dashboard/index कभी नहीं दिखाया जा सके –

+0

प्रस्तुत करने का प्रयास करें: action => 'dashboard.html.erb। http://guides.rubyonrails.org/layouts_and_rendering.html#wrapping-it-up –

2

(सटीक एक ही सवाल का जवाब यहां: https://stackoverflow.com/a/16233831/930038 दूसरों के संदर्भ के लिए भी यहाँ जवाब जोड़ना।।)

अपने routes.rb में:

authenticated do 
    root :to => 'dashboard#index' 
end 

root :to => 'homepage#index' 

यह सुनिश्चित होगा कि सभी के लिए root_url प्रमाणीकृत उपयोगकर्ता dashboard#index

आपके संदर्भ के लिए: https://github.com/plataformatec/devise/pull/1147

+0

रेल 4 में यह काम नहीं करता है। आपको दो मार्गों में से एक का नाम बदलना होगा। मेरा [उत्तर] देखें (http://stackoverflow.com/a/19090936/1836143)। –

2

यहाँ रेल 4

root to: 'dashboard#index', constraints: -> (r) { r.env["warden"].authenticate? }, 
     as: :authenticated_root 
root to: 'homepage#index' 

मैं करने के लिए/स्वीकार किए जाते हैं उत्तर संपादित इस जोड़ने की कोशिश की के साथ सही जवाब है, लेकिन यह जाहिरा तौर पर स्वीकार करने के लिए एक संपादन के बहुत ज्यादा है। वैसे भी, स्वीकार्य उत्तर (ब्रैडली से) के लिए वोट दें, इससे मुझे इस के साथ आने में मदद मिली :)

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