2012-01-24 19 views
7

我正在使用Rails 3.2.0和Devise 2.0.0.rc2。當我運行我的規格時,我收到了一個棄用警告,我沒有看到通常啓動Rails服務器的情況。在運行規範時設計2.0'layout_by_resource'棄用警告

$ 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) 

/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 

任何想法,爲什麼我看到這些警告?

回答

3

由於Rails 3.2的佈局會自動查找。當您在'devise'文件夾中使用視圖時,Rails非常聰明,可以在佈局文件夾中搜索'設計'佈局。刪除此代碼將解決折舊警告。

但是,這意味着管理和代理資源都將使用設計佈局。我不知道如何解決這個問題,得到相同的折舊警告。

6

如果您想擺脫消息,最簡單的解決方案實際上是將您的設計佈局模板重命名爲devise.html.erb f.e.到devise_layout.html.erb。當然,您可以調整layout_by_resource函數以匹配新名稱。

這將停止測試中的棄用消息,並使其再次可讀。

+0

這對我有用。 – Drew