从父控制器继承还是使用问题?

时间:2013-10-07 16:32:46

标签: ruby-on-rails ruby code-organization

我有五个共享公共代码的控制器。是让他们从父控制器继承,还是使用顾虑?例如:

class PostsController < ApplicationController
  before_action :authenticate, :set_project
  layout 'projects'
end

class CommentsController < ApplicationController
  before_action :authenticate, :set_project
  layout 'projects'
end

# three other controllers, etc...

我可以让控制器从一个声明before_actionslayout的控制器继承,或者我可以将公共代码填入关注点。

一种选择或另一种选择的标准是什么?是否定义了?

2 个答案:

答案 0 :(得分:4)

我的经验法则是:

如果控制器在URL中共享相同的命名空间(例如/projects/.../admin/...),那么我使用的是Projects::BaseControllerAdmin::BaseController的继承。

如果他们只是共享方法或声明而不共享命名空间,那么我使用mixins。

有时我更喜欢重复的代码。因为代码比具有无意义名称的mixin更容易理解。对于涉及authentication layout的问题,您是否有一个好名字?

答案 1 :(得分:1)

在大多数情况下,我使用mixins为自定义功能添加功能和继承。

例如为: 如果我需要覆盖current_user,我选择继承。如果我只得到一些共享方法,那么我选择mixins。