ActionController Mixin

时间:2011-12-18 19:17:36

标签: ruby-on-rails mixins actioncontroller

我怎样才能为动作控制器创建一个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”等未定义的错误都是错误的。

1 个答案:

答案 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