I Railscasts hanno pubblicato un grande episodio sul refactoring. Un metodo consiste nello spostare la logica di controller complessa in oggetti di servizio anziché spingerlo nel modello. Nel one service object, il codice seguente viene utilizzato:Come funziona la parola chiave `new` in questa definizione di metodo Ruby?
class PasswordReset
attr_reader :user
def self.from_email(email)
new User.find_by_email(email)
end
def self.from_token(token)
new User.find_by_password_reset_token!(token)
end
...
end
cosa significa la parola chiave new
servire in entrambi i corpi di metodo? new User.find_by_
. Quanto è diverso da User.find_by_
?
Ecco il codice chiamante:
def create # controller
password_reset = PasswordReset.from_email(params[:email])
if password_reset.user
password_reset.send_email
redirect_to root_url, notice: "Email sent with password reset instructions."
else
redirect_to new_password_reset_url, alert: "Email address does not match a user account."
end
end
Inoltre, perché il attr_reader :user
necessario?
Puoi riscrivere il titolo in modo che rifletta l'ONE domanda reale che vuoi sapere? Potrai catturare più pesci usando l'esca che trovano attraente. –