Authlogic の Session.create! を失敗したときに Session のインスタンスを例外オブジェクトに持たせたかった。

Authlogic の Session.create! を失敗したときに Session のインスタンスを例外オブジェクトに持たせたかった。

要は ActiveRecord::RecordInvalid#record のように使いたいんでモンキーパッチで

module Authlogic
  module Session
    module Existence
      class SessionInvalidError < ::StandardError
        def initialize(session)
          @record = session
          super
        end

        def record
          @record
        end
      end
    end
  end
end

です。

こうしてたのが

 def create
    @user_session = UserSession.new(user_session_params)
    if @user_session.save
      redirect_to entry_index_path
    else
      render :new
    end
  end

こうなった。

  def create
    UserSession.create!(user_session_params)
    redirect_to entry_index_path
  rescue Authlogic::Session::Existence::SessionInvalidError => e
    @user_session = e.record
    render :new
  end