我有五个共享公共代码的控制器。是让他们从父控制器继承,还是使用顾虑?例如:
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_actions
和layout
的控制器继承,或者我可以将公共代码填入关注点。
一种选择或另一种选择的标准是什么?是否定义了?
答案 0 :(得分:4)
我的经验法则是:
如果控制器在URL中共享相同的命名空间(例如/projects/...
或/admin/...
),那么我使用的是Projects::BaseController
或Admin::BaseController
的继承。
如果他们只是共享方法或声明而不共享命名空间,那么我使用mixins。
有时我更喜欢重复的代码。因为代码比具有无意义名称的mixin更容易理解。对于涉及authentication
和 layout
的问题,您是否有一个好名字?
答案 1 :(得分:1)
在大多数情况下,我使用mixins为自定义功能添加功能和继承。
例如为:
如果我需要覆盖current_user
,我选择继承。如果我只得到一些共享方法,那么我选择mixins。