当前我有三个控制器使用完全相同的 authorize_journey 方法(位于控制器中)。每个控制器也调用完全相同的 before_filter:authorize_journey 。通过最佳实践减少此类冗余的最佳方法是什么?
另外,如果可能的话,我怎么能坚持使用胖模型瘦身控制器呢?
答案 0 :(得分:2)
如果authorize_journey方法都相同,那么您可以将副本移动到'〜/ app / controllers / application_controller.rb'并将其从所有单个控制器中删除。
before_filters可以保持原样。
当然,如果方法不相同,您可能需要进行一些重构以进一步概括。如果您发布代码,我们可以进一步发表评论。
答案 1 :(得分:0)
您始终可以在application_controller.rb
。
将authorize_journey
方法移至application_controller
。
假设您有4个控制器并且需要3个控制器中的before_filter
。然后,您可以在before_filter :authorize_journey
中定义application_controller
并使用:
skip_before_filter :authorize_journey
在您不想要before_filter
答案 2 :(得分:0)
我建议将方法添加到关注点,并将它们包含在需要authorize_journey before_filter的控制器中。
关注的代码将是:
# controllers/concerns/authorize_journery.rb
module AuthorizeJourney
extend ActiveSupport::Concern
included do
before_filter :authorize_journey
end
protected
def authorize_journey
# Code goes here
end
end
现在在控制器中,包括AuthorizeJourney模块。
# controllers/examples_controller.rb
class ExamplesController < ApplicationController
include AuthorizeJourney
# Code goes here
end