2010-07-19 10 views
10

Sono nuovo alle rotaie dopo essermi trasferito da PHP e sto avendo una fine alle frustrazioni, ma spero che ci sia una curva di apprendimento ripida.che confrontano i valori di params [: id] e sessione [: user_id] non funzionanti

Stavo seguendo una guida su come creare un clone di Twitter in binari, e ho continuato lungo quel percorso rendendolo sempre più simile a Twitter.

Quindi ho una pagina "utenti" /users/show.html.erb che mostra tutti i post di un utente.

Ora, se l'utente attualmente connesso è lo stesso del proprietario della pagina, sto cercando di mostrare la casella di testo in modo che l'utente possa aggiungere una nuova voce.

Ho quello che dovrebbe essere molto semplice

 
<% if params[:id] == session[:user_id] %> 
    put the text box here 
<% end %> 

, naturalmente, che non funziona, ma proprio sopra di esso Sono uscita sia la sessione [: user_id] e le [params: id], e la stampa è esattamente la stessa.

Se imposto da == a! =, Viene visualizzato il messaggio 'Metti la casella di testo qui'.

qualche suggerimento su cosa sto facendo male? So che questi due valori corrispondono, come posso vedere nella url e l'output dell'utente attualmente loggato. Ho anche uscita

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

in modo che posso vedere non ci sono lacune o spazi o altri caratteri su entrambe le estremità dei parametri, e tutto sembra pulito.

L'output è simile al seguente

 
-4c4483ae15a7900fcc000003- 
-4c4483ae15a7900fcc000003- 

che è la MongoDB objectId dell'utente con trattini su entrambi i lati per dimostrare che non ci sono spazi o nulla.

+0

Chiama ".inspect" su di essi prima di stamparli per vedere i loro valori reali, non solo i loro valori di stringa. – mckeed

risposta

16

Sei sicuro che entrambi gli elementi siano stringhe semplici? Cosa succede se corri, diciamo

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

?

+0

Questo è molto probabile. Puoi provare a stampare 'params [: id] .class' e' session [: user_id] .class' per vedere il tipo. – Karl

2

Potrebbe essere come indicato da jasonpgignac. Se inserisci IRB:

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

Assicurarsi che siano entrambi dello stesso tipo. Mettendo <%= num2 %> in realtà si attiverà il metodo .to_s ... quindi perché i due sembrano uguali quando li si stampa nella tua pagina .erb.

Inoltre, è possibile spostare tale confronto nel controller. Qualcosa di simile:

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

allora si può mettere nella vostra vista:

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

rende il codice un po 'più facile da leggere.

0

Come è stato già affermato, nella maggior parte dei casi questo tipo di problemi è causato dalla mancata corrispondenza dei tipi confrontati. La semplice aggiunta di to_s a entrambe le variabili risolve la maggior parte dei casi.

Here controlla la grande fonte per ulteriori informazioni su tutti i tipi di confronti utilizzati in Ruby.

Problemi correlati