2010-07-19 11 views
10

मैं PHP से आगे बढ़ने के बाद रेल के लिए नया हूं और निराशाओं का कोई अंत नहीं कर रहा हूं, लेकिन उम्मीद है कि एक सीधी सीखने की वक्र है।पैराम्स के मानों की तुलना में रेल [: id] और सत्र [: user_id] काम नहीं कर रहे हैं

मैं रेल में एक ट्विटर क्लोन बनाने के तरीके पर एक गाइड का पालन कर रहा था, और उस पथ के साथ जारी रखा है जैसे इसे अधिक से अधिक ट्विटर बनाना।

तो मुझे एक 'उपयोगकर्ता' पृष्ठ /users/show.html.erb मिला है जो उपयोगकर्ता से सभी पोस्ट दिखाता है।

अब, यदि वर्तमान में लॉग इन उपयोगकर्ता पृष्ठ के मालिक के समान है, तो मैं टेक्स्ट बॉक्स दिखाने की कोशिश कर रहा हूं ताकि उपयोगकर्ता एक नई प्रविष्टि जोड़ सके।

मैं क्या एक बहुत ही सरल

 
<% if params[:id] == session[:user_id] %> 
    put the text box here 
<% end %> 
निश्चित रूप से

, कि काम नहीं कर रहा होना चाहिए, लेकिन यह ऊपर सही मिल गया है मैंने उत्पादन दोनों सत्र [: user_id] और पैरामीटर [: आईडी], और प्रिंटआउट बिल्कुल वही है।

यदि मैं == से! = सेट करता हूं, तो मुझे 'टेक्स्ट बॉक्स यहां दिया गया' संदेश मिलता है।

कोई सुझाव है कि मैं क्या गलत कर रहा हूं? मुझे इन दो मानों का मिलान पता है, क्योंकि मैं यूआरएल में देख सकता हूं और वर्तमान में लॉग इन किए गए उपयोगकर्ता के आउटपुट को देख सकता हूं। मैं भी उत्पादन

 
-<% session[:user_id] %>- 
-<% params[:id] %>- 

है ताकि मैं देख सकता हूँ वहाँ कोई अंतराल या रिक्त स्थान या मापदंडों के दोनों छोर पर अन्य पात्रों है, और यह सब साफ लग रहा है।

उत्पादन इस

 
-4c4483ae15a7900fcc000003- 
-4c4483ae15a7900fcc000003- 

जो दिखाने के लिए कोई रिक्त स्थान या कुछ भी देखते हैं कि दोनों तरफ डैश के साथ उपयोगकर्ता की MongoDB objectId है जैसा दिखता है।

+0

उनके वास्तविक मूल्यों को देखने के लिए उन्हें प्रिंट करने से पहले उन पर '.inspect' पर कॉल करें, न केवल उनके स्ट्रिंग मान। – mckeed

उत्तर

16

क्या आप सुनिश्चित हैं कि दोनों आइटम सरल तार हैं? यदि आप दौड़ते हैं तो क्या होता है,

params[:id].to_s == session[:user_id].to_s 

कहें?

+0

यह सबसे अधिक संभावना है। आप 'पैराम्स [: id] .class' और 'session [: user_id] .class' को टाइप करने के साथ-साथ टाइप को देखने का प्रयास कर सकते हैं। – Karl

2

यह जेसनस्पिग्नाक की तरह इंगित किया जा सकता है। यदि आप आईआरबी में प्रवेश करते हैं:

num = "7" 
num2 = 7 
num == num2 # => false 

सुनिश्चित करें कि वे दोनों एक ही प्रकार के हैं। <%= num2 %> डालकर वास्तव में .to_s विधि को ट्रिगर करेगा ... इसलिए जब आप उन्हें अपने .erb पृष्ठ में आउटपुट करते हैं तो दोनों बराबर क्यों दिखाई देते हैं।

इसके अलावा, आप उस तुलना को नियंत्रक में ले जाना चाहते हैं। की तरह कुछ:

@is_user_home = params[:id].to_s == session[:user_id].to_s 

तो फिर आप अपने दृश्य में नहीं रखा जा सकता है:

<% if @is_user_home %> 
    code here 
<% end %> 

यह एक छोटे से अधिक पढ़ने में आसान कोड बनाता है।

0

जैसा कि पहले से ही कहा गया था, ज्यादातर मामलों में इस तरह की समस्याएं तुलनात्मक प्रकारों के मेल के कारण होती हैं। दोनों चरों में बस to_s जोड़ना ज्यादातर मामलों को हल करता है।

Here रूबी में उपयोग की जाने वाली सभी प्रकार की तुलनाओं के बारे में अधिक जानने के लिए महान स्रोत की जांच करें।

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