我怎样才能为动作控制器创建一个mixin,它的作用如下:
layout Proc.new { |controller|
if controller.request.xhr?
'minimal'
else
'application'
end
}
(我不能将ApplicationController子类化,因为我使用的是与ActionController绑定的gem(Devise)。无论如何,mixin似乎更合适。)
我已经创建了一个名为“XHRController”的模块,并在application.rb中使用了“ApplicationController :: Base.include XHRController”,但是对于任何使用“layout”,“before_filter”等未定义的错误都是错误的。
答案 0 :(得分:1)
因此,看起来您正在决定使用哪种布局。如果它是一个AJAX请求,你想使用'minimal',否则使用应用程序。并且您希望Devise视图也遵循相同的决策树。
好像你可能会有类似的东西:
class ApplicationController < ActionController::Base
layout :layout_decision_by_request_type
def layout_decision_by_request_type
if request.xhr?
'minimal'
else
'application'
end
end
end
设计维基中的这个页面还有另外两个选项:https://github.com/plataformatec/devise/wiki/Custom-Layouts-for-Devise/22d024556aec73c8b65b630bd11a2e8ff7d17eaa