防止控制器在Rails中具有相同的方法冗余

时间:2015-05-27 03:41:12

标签: ruby-on-rails

当前我有三个控制器使用完全相同的 authorize_journey 方法(位于控制器中)。每个控制器也调用完全相同的 before_filter:authorize_journey 。通过最佳实践减少此类冗余的最佳方法是什么?

另外,如果可能的话,我怎么能坚持使用胖模型瘦身控制器呢?

3 个答案:

答案 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

的第4个控制器中

答案 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