私は回復モジュールは、(アプリは招待のみである)、私は部分的に初期化のメソッドを宣言し、私のユーザーのためのパスワードリセットのリンクを含む電子メールを「招待」送りたい:Devise Recoverableを正しく拡張する方法は?
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
回復可能がきれいに拡張され、それ私のメーラーがinvite_new_user法(レールのコンソール出力を)持っていないことを言う:
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
が、呼び出しは、同じコンソールセッションでの方法があります。
1.9.2p290 :003 > ::Devise.mailer.method_defined? 'invite_new_user'
=> true
私は何が欠けていますか?
'Devise.mailer'は' Devise :: Mailer'を返します。これはクラスであり、インスタンスではありません。したがって、おそらく 'invite_new_user'を' self.invite_new_user'と定義するべきです。 – Casper
ヒントありがとう、それは私に考えさせた。このメソッドはコントローラからアクセスしている間はうまくいくようですが、コンソールでモデルのみをロードすると、あなたのようにオブジェクトの代わりにクラスを返すようです。 – meta