1

我有一组适用于某些控制器的 before_helpers 和 helper_methods,包括所有设计控制器。

在过滤器之前声明它们的首选方法是什么?

我尝试了这篇文章但没有成功(出现错误sessions_controller.rb to define Devise::SessionsController (LoadError))。如果我重新做所有的控制器,我需要从看起来重复的 gem 中再次复制相同的代码。

知道我该怎么做吗?

4

1 回答 1

1

将您before_filter的放入您的application_controller.rb并检查是否params[:controller]是设计控制器的名称:

# app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
    before_filter :check_if_devise

    private

    def check_if_devise
        if ['confirmations', 'omniauth_callbacks', 'passwords', 'registrations', 'sessions', 'unlocks'].include? params[:controller]
            # logic for before_filter
        end
    end
end

更新:

或者,如果您想让您的存在与逻辑before_filter分开check_if_devise,您可以从中删除现有函数before_filter并仅在条件逻辑check_if_devise通过时调用它:

# app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
    before_filter :check_if_devise

    private

    def check_if_devise
        if ['confirmations', 'omniauth_callbacks', 'passwords', 'registrations', 'sessions', 'unlocks'].include? params[:controller]
            function_to_run
        end
    end

    def function_to_run
        # code goes here
    end
end

将其放置在application_controller.rb其中将确保before_filter为设计控制器运行。对于其他单独的一次性控制器,您可以调用function_to_runbefore_filter

# app/controller/random_controller.rb
class RandomController < ApplicationController
    before_filter :function_to_run

end
于 2013-07-11T20:24:03.903 回答