在运行规范时设计2.0'layout_by_resource'弃用警告

msh*_*rir 7 ruby-on-rails devise

我正在使用Rails 3.2.0和Devise 2.0.0.rc2.当我运行我的规范时,我得到一个弃用警告,当我正常启动Rails服务器时,我没有看到.

$ rake
.DEPRECATION WARNING: Layout found at "devise" for
 DeviseController but parent controller set layout to :layout_by_resource.
 Please explicitly set your layout to "devise" or
 set it to nil to force a dynamic lookup.   
(called from realtime at
 /Users/foo/.rbenv/versions/1.9.2-p290/lib/ruby/1.9.1/benchmark.rb:310)
Run Code Online (Sandbox Code Playgroud)

/app/controllers/application_controller.rb看起来像:

class ApplicationController < ActionController::Base
  protect_from_forgery

  layout :layout_by_resource

  protected

  def layout_by_resource
    if devise_controller?
      if resource_name == :agent && action_name == 'new'
        nil
      elsif resource_name == :admin && action_name == 'new'
        nil
      else
        'devise'
      end
    else
      'application'
    end
  end

end
Run Code Online (Sandbox Code Playgroud)

知道我为什么看到这些警告吗?

Erw*_*inM 6

如果你想摆脱这些消息,最简单的解决方案实际上是将你的设计布局模板重命名为devise.html.erbfe,to devise_layout.html.erb.当然,您可以调整layout_by_resource功能以匹配新名称.

这将停止测试中的弃用消息并使其再次可读.


Swe*_*eam 3

从 Rails 3.2 开始,将自动查找布局。当您使用“devise”文件夹中的视图时,Rails 足够智能,可以在布局文件夹中搜索“devise”布局。删除此代码将解决折旧警告问题。

但是,这意味着管理员和代理资源都将使用设备布局。我不知道如何解决这个白化问题并获得相同的折旧警告。