我正在尝试在Devise和CanCan之间建立一个Rails Gem。不像Devise那么复杂,但有视图和控制器。
我已经创建了一个方法,可以添加到父应用程序的任何控制器的顶部,几乎完全像Devise的before_action :authenticate_user!
和CanCan的load_and_authorize_resource
如果不满足要求,我需要redirect_to
已安装路径中的路径的方法。
module MyEngine
module ControllerAdditions
extend ActiveSupport::Concern
module ClassMethods
def pin_verified
current_user ||= nil
@pinned = current_user.nil? ? nil : current_user
redirect_to setup_mobiles_path unless @pinned && @pinned.verified?
end
end
end
end
并在我的spec/dummy/app/controllers/users_controller.rb
class UsersController < ApplicationController
pin_verified
def index
@users = User.all
end
end
pin_verified
正在被调用,但我得到以下错误:
undefined local variable or method `setup_mobiles_path' for UsersController:Class
关于我应该怎么做的任何想法?
====编辑====
我现在改变了这个来提出一个自定义异常,但现在我需要拯救那个异常,然后重定向到所需的路径。
def pin_verified
current_user ||= nil
@pinned = current_user.nil? ? nil : current_user
unless @pinned && @pinned.verified?
raise ValidatedPinExpired
end
end
我尝试将它添加到我的gem的ApplicationController中,但它似乎根本没有击中Controller。
module MyEngine
class ApplicationController < ActionController::Base
rescue_from Exception do |exception|
Rails.logger.info "==== exception: #{exception} ===="
redirect_to setup_mobiles_path
end
end
end