Sono su una ferrovia che si esercita su alcuni binari e mi sono imbattuto in qualcosa che sto cercando di capire.Cosa fa il sé in ruby su rotaie?
Non ho capito cosa stava facendo il "sé" sul metodo di autenticazione. Così ho cancellato e testato il login del mio app per vedere se avrebbe mostrato un errore e lo ha fatto:
error:
**NoMethodError in SessionsController#create
undefined method `authenticate' for #<Class:0x00000102cb9000**>
Vorrei davvero apprezzare se qualcuno potesse spiegare esattamente che cosa quel "Sé" sta facendo. Stavo cercando di capire esattamente cosa stava succedendo, ma non riesco a capirlo.
Il metodo è definito nel modello e chiamato in session_controller .. Ho continuato a cancellare la mia app e iniziare da zero per ottenere il blocco di esso e molte cose hanno senso per me ogni volta che ricomincio ma sono bloccato a "sé".
Sono solo il tipo di persona a cui piace capire perché qualcosa funziona.
regolatore:
def create
user = User.authenticate(params[:email], params[:password])
if user
session[:user_id] = user.id
redirect_to root_path, :notice => "Logged In"
else
flash.now.alert = "Invalid credentials"
render "new"
end
end
modello:
def self.authenticate(email, password)
user = find_by_email(email)
if user && user.password_hash == BCrypt::Engine.hash_secret(password, user.password_salt)
user
else
nil
end
end
Leggera estensione alla tua risposta: 'def object.my_foo_method'. Definisce 'my_foo_method' su' obj'. Nel contesto della tua risposta, 'self' è l'oggetto della classe' Class' (vale a dire, la classe 'MyClass'). Quindi, definisce il metodo su quella classe. – Swanand
Non dovrebbe essere usato un segno '@' per le istanze, ad es. @ istanza = ...? –
dato che è rotaia e probabilmente sarà usato nella vista –