在哪里找到多个Rails控制器使用的方法并限制对基本控制器的访问

she*_*edd 3 ruby model-view-controller inheritance ruby-on-rails

我有两个控制器(比如ArticlesController和PostsController)使用大约5个相同的方法.这是使用5种方法的唯一两个控制器,因此他们不觉得它们应该位于ApplicationController中.目前,我创建了一个基本控制器(比如ContentController),然后现有的两个控制器继承自这个基础.

我的问题是 - 这是减少重复的最佳方法吗?

第二个问题 - 如何确保这些方法只能由从基础继承的控制器访问?在上面的示例中,我不希望直接访问ContentController.

谢谢!

tyb*_*103 5

我认为有一个共同的祖先,ArticlesController和PostsController都继承自己是完全可以接受的.这就是继承的原因不是吗?如果您不希望直接从ContentController公开操作,只需确保没有路由路由到ContentController.

另一种方法是为这些功能制作一个模块,并根据需要包含该模块.假设您要将模块称为"我的函数":

/lib/my_functions.rb:

module MyFunctions
  def function1
    ...
  end

  def function2
    ...
  end

  ...
end
Run Code Online (Sandbox Code Playgroud)

然后,无论您需要哪些功能,只需包含该模块:

class PostsController < ActionController::Base
  include MyFunctions
  ...
end

class ArticlesController < ActionController::Base
  include MyFunctions
  ...
end
Run Code Online (Sandbox Code Playgroud)