Risposte:
È definito da diverse gemme, ad esempio Devise
Dovrai memorizzare user_id da qualche parte, di solito nella sessione dopo l'accesso. Si presuppone inoltre che la tua app abbia e abbia bisogno di utenti, autenticazione, ecc.
In genere, è qualcosa del tipo:
class ApplicationController < ActionController::Base
def current_user
return unless session[:user_id]
@current_user ||= User.find(session[:user_id])
end
end
Ciò presuppone che esista la classe User, ad es #{Rails.root}/app/models/user.rb.
Aggiornato: evita query di database aggiuntive quando non c'è un utente corrente.
sessionè integrato in Rails. Per impostazione predefinita, utilizza un cookie per mantenere lo stato di un client tra le richieste. Vedi guides.rubyonrails.org/security.html#sessions per maggiori informazioni.
return unless session[:user_id]come mostrato nella risposta di Zach - senza di ciò, ogni if current_usercontrollo mentre sei disconnesso attiverà un'altra query sul database.
Sì, current_userutilizza session. Puoi fare qualcosa di simile nel tuo controller dell'applicazione se vuoi eseguire la tua autenticazione:
def current_user
return unless session[:user_id]
@current_user ||= User.find(session[:user_id])
end
sessionè un po 'come params, tranne che persiste per più richieste. Puoi usarlo per memorizzare qualsiasi tipo di parametro persistente univoco per i tuoi singoli utenti (fino alla scadenza della loro sessione o alla disconnessione). Puoi leggere di più al riguardo qui: ActionController: Accessing the Session