मैं वर्तमान में एक आरओआर ट्यूटोरियल (http://railstutorial.org/chapters/sign-in-sign-out#sec:signin_success प्रासंगिक अनुभाग है) के माध्यम से जा रहा हूं जो काफी अच्छा प्रतीत होता है, हालांकि नमूना साइट देखने की कोशिश करते समय मैंने निम्नलिखित समस्या में भाग लिया है ।अपरिभाषित स्थानीय चर या विधि 'current_user'
Extracted source (around line #10):
7: <li><%= link_to "Home", root_path %></li>
8: <li><%= link_to "About", about_path %></li>
9:
10: <% if signed_in? %>
11: <li><%= link_to "Profile", current_user %></li>
12: <li><%= link_to "Sign out", signout_path, :method => delete %></li>
13: <% else %>
जैसा कि आप देख सकते हैं, यह समस्या मेरी विधि "sign_in" से हो रही है?
module SessionsHelper
def sign_in(user)
cookies.permanent.signed[:remember_token] = [user.id, user.salt]
current_user = user
end
def sign_out
cookies.delete[:remember_token]
current_user = nil
end
def current_user= (user)
@current_user ||= user_from_remember_token
end
def signed_in?
!current_user.nil?
end
private
def user_from_remember_token
User.authenticate_with_salt(*remember_token)
end
def remember_token
cookies.signed[:remember_token] || [nil, nil]
end
end
से: जो (मैं सहायक से कोड के बाकी को शामिल किया है एक संदर्भ देने के लिए, क्षमा याचना) current_user चर सेट कर दिया जाता है कि क्या जाँच करके जांच करने के लिए माना जाता है, तो उपयोगकर्ता के हो या ना किया गया है मेरी समझ, .nil? एक ऐसी विधि है जो जांचती है कि कोई ऑब्जेक्ट परिभाषित किया गया है या नहीं, इसलिए अपरिभाषित वस्तु को त्रुटि उत्पन्न नहीं करनी चाहिए बल्कि झूठी वापसी करनी चाहिए? मैंने current_user के सभी मामलों के लिए ट्यूटोरियल की खोज की (यह देखने से पहले कि किसी और को कम सफलता के साथ यह समस्या है या नहीं) और मेरा कोड सही लगता है, इसलिए मैं थोड़ा उलझन में हूं और यदि कोई मुझे रूबी चर के तरीके को समझने में मदद करने में सक्षम है माना जाना चाहिए और मेरा कोड क्यों काम नहीं कर रहा है मैं सबसे आभारी हूं।
संपादित करें:
अगर यह गुंजाइश के साथ महत्वपूर्ण है के रूप में मैं सिर्फ दोनों रेल और रूबी शुरुआत कर रहा हूँ मैं सुनिश्चित नहीं हूं, फिर भी सहायक SessionsHelper मेरे उपयोगकर्ता नियंत्रक और विचारों के द्वारा प्रयोग किया जा रहा है (यह मेरी अनुप्रयोग में शामिल है नियंत्रक)
या मुझे विश्वास है कि आप "@current_user || = user_from_remember_token || false" कर सकते हैं यदि आप अपने वर्तमान कोड के साथ और अधिक होना चाहते हैं। – JackCA
जबकि यह निश्चित रूप से त्रुटि को रोकता है, यह लगातार झूठी लौट रहा है। मुझे लगता है कि यह संभव है कि मेरे साइन-इन तरीकों के साथ कोई समस्या हो सकती है जो एक current_user को कभी परिभाषित नहीं किया जा सकता है, इसलिए शायद अच्छी नींद के बाद इसे देखने के लिए मेरे लिए सबसे अच्छा हो। – djlumley