2010-11-20 11 views
18

मैं रेल 3 के साथ तैयार कर रहा हूं और मैं एक ऐसा पृष्ठ बनाने की कोशिश कर रहा हूं जिसे हर किसी द्वारा देखा जा सकता है (यहां तक ​​कि उन लोगों ने भी साइन अप नहीं किया है) लेकिन पंजीकृत लोगों के लिए अतिरिक्त कार्यक्षमता है।प्रमाणीकरण का उपयोग किये बिना रेल में देवता का उपयोग कर वर्तमान उपयोगकर्ता कैसे प्राप्त करें! नियंत्रक

समस्या यह है कि जब मैं current_user को कॉल करता हूं तो कोई उपयोगकर्ता नहीं है क्योंकि मैंने प्रमाणीकरण का उपयोग नहीं किया है! मेरे नियंत्रक पर फ़िल्टर करें, क्योंकि मैं अनियंत्रित उपयोगकर्ताओं को इसे देखने में सक्षम होना चाहता हूं।

यदि उपयोगकर्ता सत्र में हैं तो अन्य उपयोगकर्ता के बिना इसे छोड़कर मैं उपयोगकर्ता में कैसे साइन इन करूं?

+4

यदि यह प्रश्न अभी भी सक्रिय है, तो प्रमाणीकरण_यूसर का उपयोग किए बिना डेविस अब हमेशा आपके लिए current_user लोड करता है! फिल्टर से पहले या नहीं। – zykadelic

उत्तर

14

आप विचारों में अतिरिक्त कार्यक्षमता जोड़ने के लिए user_signed_in? का उपयोग कर सकते हैं।

<% if user_signed_in? %> 
... for logged in users only and current_user is not nil here.... 
<% else %> 
... for anonymous users only and current_user is nil here.... 
<% end %> 
+2

हाँ, user_signed_in को छोड़कर? सच हो सकता है और current_user शून्य हो सकता है। मैं जो करना चाहता हूं वह है अगर कोई लॉग इन है, लेकिन अगर नहीं, तो उपयोगकर्ता को प्रमाणीकृत होने की आवश्यकता नहीं है, तो इसे current_user ऑब्जेक्ट लोड करना है। –

0

नहीं nitpick करने के लिए है, लेकिन यह एक ही स्थानों में दोनों काम की तरह लगता है, यह है एक से एक लाइन के एक स्क्रैप सिर्फ इतना है कि current_user यदि कोई उपयोगकर्ता के प्रवेश किए आरंभ नहीं किया जाता है।

यहाँ संबंधित विचार, यह एक before_filter जो संपादन मदों से उन जो उन्हें

user_signed_in? && (@subscription.user_id == current_user.id || current_user.admin) 

से संबंधित नहीं है आप user_signed_in? पर एक && साथ पूरे बिट रैप करने के लिए हालांकि राशि पर प्रतिबंध लगाता है से है, या इसे दुर्घटना होगा कोई उपयोगकर्ता सिग्ने है जब में डी।

1

एक ही तरीका है मैं यह करने के बारे में सोच सकते यह हर कॉल करने के लिए आप वर्तमान उपयोगकर्ता है, जो शायद सबसे अच्छा समाधान नहीं है कॉल करना चाहते है ... तो यह

if user_signed_in? 
#code for current_user 
else 
#code for no current_user object 
end 
की तरह कुछ होगा
1

बस एक त्वरित नोट। मैं यह जानना चाहता था कि कोई व्यवस्थापक उपयोगकर्ता लॉग इन किया गया था, और यदि ऐसा है तो सार्वजनिक दृश्य पृष्ठ पर कुछ उपयोगी लिंक & जानकारी प्रदान करें, इसलिए व्यवस्थापक संसाधन को संपादित करने के लिए त्वरित रूप से व्यवस्थापक अनुभाग पर जा सकता है।

हालांकि आप (ActiveAdmin के लिए आने शुरू हो गए निर्देशों का पालन) AdminUser के रूप में अपने उपयोगकर्ता तो तरीकों user_signed_in उत्पन्न करता है, तो? और current_useradmin_user_signed_in हैं? और current_admin_user

तो एक पोस्ट (विचारों/पदों/show.html.erb) मैं उपयोग कर सकते हैं दिखाने के लिए एक सार्वजनिक दृश्य में (उदाहरण के लिए स्पष्टता के लिए सरलीकृत)

<div id='show_post_<%= @post.id %>'> 
    <h2><%= @post.title %></h2> 
    <div class='post_author'>by: <%= @post.author%></div> 
    <% if admin_user_signed_in? %> 
    <div class='admin_links'>Put links to admin pages for: 
     <%= current_admin_user.email %> 
    </div> 
    <% end %> 

    <div class='post_body'> 
     <%= raw @post.content %> 
    </div> 
</div> 

मैं उम्मीद करते हैं कि विधि के नाम उत्पन्न हो जाएगा जो कुछ के आधार पर आप (यदि आप अपने उपयोगकर्ता मॉडल वीआईपी नामित तो विधि vip_signed_in होगा?) जब आप अपने उपयोगकर्ताओं ActiveAdmin या वसीयत में की स्थापना का इस्तेमाल किया।

+0

इसके लिए धन्यवाद .. – baash05

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

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