在我的控制器操作中,我几乎总是有不同的检查设置闪存错误和重定向,如:
def create
flash[:error] = I18n.t('error.no_resources') and redirect_to research_center_url and return if not resource_report[:has_resources]
flash[:error] = I18n.t('error.no_deps') and redirect_to research_center_url and return if not research.fulfil_requirements?(active_city)
...
end
这很好用,但我认为在我的模型中检查before_create中的那些比在控制器中检查更好(尽管flash消息通常应该在控制器中)。
但是,我无法将这些检查放在我的模型中,因为它们包含我无法正常获取的非模型相关信息。所以我的问题是,如何检查控制器是否存在正常的应用程序相关错误,这些错误不是例外,必须闪回给用户?您是否通过模型回调或其他方式在控制器中进行检查?
答案 0 :(得分:1)
对许多但不是所有控制器文件使用before_filter的DRYest方法是使用before_filter和子类ApplicationController。
这使您可以拥有多个控制器文件,这些文件自动共享同一组before_filters
在这个例子中,我正在调用子类FrontController。您可以使用任何名称。
例如
class FrontController < ApplicationController
# Used for all "frontend" controllers which have the same checks.
before_filter :standard_checks
# standard_checks will be a before filter for all controllers that
# inherit from this controller class
end
然后
class SomeController < FrontController
def create
....
end
end