1

我如何为动作控制器创建一个 mixin,它执行以下操作:

layout Proc.new { |controller|
  if controller.request.xhr?
    'minimal'
  else
    'application'
  end
}

(我不能继承 ApplicationController,因为我使用的是与 ActionController 绑定的 gem(设计)。无论如何,mixin 似乎更合适。)

我创建了一个名为“XHRController”的模块并在 application.rb 中使用了“ApplicationController::Base.include XHRController”,但是在任何使用“layout”、“before_filter”等时都会出错,因为未定义。

4

1 回答 1

1

所以,看起来你正在寻找决定使用哪种布局。如果它是 AJAX 请求,您想使用“最小”,否则使用应用程序。并且您希望设计视图也遵循相同的决策树。

好像你可以有类似的东西:

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

设计 wiki 中的此页面还有两个其他选项:https ://github.com/plataformatec/devise/wiki/Custom-Layouts-for-Devise/22d024556aec73c8b65b630bd11a2e8ff7d17eaa

于 2011-12-19T02:51:07.277 回答