Quiero módulo recuperable para enviar "invitar" a mensajes de correo electrónico con enlaces para restablecer una contraseña para mis usuarios (la aplicación está en invitar solamente), declaro parcialmente métodos de inicialización:¿Cómo extender adecuadamente el dispositivo recuperable?
module Devise
class Mailer
def invite_new_user(record)
devise_mail(record, :invitation_instructions)
end
end
end
module Devise
module Models
module Recoverable
def send_invite_user_instructions!
return unless status == User::STATUS_PENDING
generate_reset_password_token!
::Devise.mailer.invite_new_user(self).deliver
end
end
end
end
Y recuperable se extendió muy bien, pero dice que mi programa de correo no tiene método invite_new_user (carriles de salida de la consola):
1.9.2p290 :002 > user.send_invite_user_instructions!
User Load (1.4ms) SELECT "users".* FROM "users" WHERE "users"."reset_password_token" = 'zMQK1CEXYupjNKpH8dph' LIMIT 1
(0.3ms) BEGIN
(15.0ms) UPDATE "users" SET "reset_password_token" = 'zMQK1CEXYupjNKpH8dph', "updated_at" = '2012-05-01 17:40:32.085256' WHERE "users"."id" = 59
(4.5ms) COMMIT
NoMethodError: undefined method `invite_new_user' for Devise::Mailer:Class
pero tiene vocación método en la misma sesión de consola:
1.9.2p290 :003 > ::Devise.mailer.method_defined? 'invite_new_user'
=> true
¿Qué me estoy perdiendo?
Parece 'Devise.mailer' devuelve' Devise :: Mailer', que es una clase, no una instancia. Por lo tanto, probablemente debas definir 'invite_new_user' como' self.invite_new_user'. – Casper
Gracias por la pista, eso me hizo pensar. Parece que este método funciona bien al acceder desde los controladores, pero al cargar solo el modelo en la consola, parece devolver la clase en lugar del objeto como dijiste. – meta