【发布时间】:2016-03-15 13:53:35
【问题描述】:
我有几个控制器:
class First < ApplicationController
before_action: do_this
before_action: do_this_too
end
class Second < ApplicationController
before_action: do_this
before_action: do_this_too
end
class Third < ApplicationController
end
两个控制器有相同的before_action 的方法。如何干掉这段代码,以便First 和Second 类在一个位置使用before_action 而不是Third 类?
我正在考虑某种类继承解决方案。有任何想法吗?在我的真实示例中,我有更多类,每个类都有多个相同的before_actions?
【问题讨论】:
-
您可以创建一个模块来定义这些
before_action回调并将该模块包含在每个需要它的控制器中,或者使用继承并创建一个父控制器 -
我不会在 before_action 得到未定义的方法吗?行动之前不是类方法吗?如果没有,我应该把它放在哪里?
-
你可以在这里找到一个例子:stackoverflow.com/questions/27867124/…
-
不要,就这样吧。很清楚,很明显,很简单。将它放在一个模块中并不会改善事情。
include BeforeActions+ 那个文件真的比两行好吗?恕我直言,它不是。由于此示例非常抽象,您可以做的一件事是创建第三个do_both方法,该方法调用do_this和do_this_foo。但这只有在这些方法以某种方式“属于”在一起时才有意义(即:do_this_and_foo)。 -
@Carpetsmoker 我知道伙计,我知道。你正在向合唱团布道。我没有问它是否更好,我问的是如何做到这一点。我 100% 同意您和以下评论者的意见。
标签: ruby-on-rails ruby ruby-on-rails-4