現在、ユーザーモデルを設定しており、新しいユーザーにアクティベーショントークンが電子メールで送信される設定があります。リンクをクリックすると、呼び出されるコントローラーメソッドに次の行が表示されます。
@user = User.find_by_activation_token! params[:activation_token]
これで、アクティベーショントークンに24時間の有効期限が関連付けられました。有効期限が切れている場合は、ユーザーレコードを破棄します。これは私がコントローラーに実装するのに十分簡単ですが、私はより優れたRails開発者とより優れたRubyプログラマーになろうとしているので、これをモデル(スキニーコントローラー、ファットモデル!)に入れるべきだと思いました。クラスメソッドについての洞察も得られると思いました。
私はこれを何度か試みましたが、かなり失敗しました。これはこれまでの私の最善の努力です。
def self.find_by_activation_token!(activation_token)
user = self.where(activation_token: activation_token).first #I also tried User.where but to no avail
if user && user.activation_token_expiry < Time.now
user.destroy
raise ActivationTokenExpired
else
raise ActiveRecord::RecordNotFound
end
user
end
これを実行するために多くの変更を加える必要がありますか、それとも完全に間違った方向に進んでいますか?