Attualmente sto passando attraverso un tutorial RoR (http://railstutorial.org/chapters/sign-in-sign-out#sec:signin_success è la sezione pertinente) che sembra essere abbastanza buono, anche se ho incontrato il seguente problema quando si tenta di visualizzare il sito di esempio .variabile locale indefinita o metodo '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 %>
Come si può vedere, il problema deriva dal mio metodo "signed_in?" che dovrebbe controllare se l'utente si è connesso o meno controllando se la variabile current_user è impostata (ho incluso il resto del codice dal supporto per dare un contesto, scuse):
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
Da la mia comprensione, .nil? è un metodo che controlla se un oggetto è stato definito o meno e quindi l'oggetto non definito non dovrebbe generare un errore ma piuttosto restituire falso? Ho cercato il tutorial per tutti i casi di current_user (prima di verificare se qualcun altro ha avuto questo problema con scarso successo) e il mio codice sembra corretto quindi sono un po 'confuso e se qualcuno è in grado di aiutarmi a capire il modo in cui le variabili di Ruby sono dovrebbe essere accessibile e perché il mio codice non funziona sarei molto grato.
Edit:
non sono sicuro se è importante campo di applicazione Sto solo cominciando sia Rails e Ruby, ma la SessionsHelper helper è utilizzato da mio controller Utenti e vista (è incluso nelle mie applicazioni controller)
o credo che si possa fare "@current_user || = user_from_remember_token || false" se si desidera essere più in linea con il codice corrente. – JackCA
Mentre questo sicuramente ferma l'errore, restituisce costantemente false. Immagino sia possibile che possa esserci un problema con i miei metodi di firma che non rendono mai attuale un utente corrente, quindi probabilmente è meglio per me dargli un'occhiata dopo una buona notte di sonno. – djlumley