2012-08-22 47 views
2

Devise(2.1)使用我的自定義視圖,直到我告訴它使用自定義控制器。現在它忽略了我的自定義視圖。覆蓋會話控制器防止正在使用的自定義視圖

以前的一切工作得很好:

泰爾設計使用自定義視圖/config/devise.rb

# ==> Scopes configuration 
# Turn scoped views on. Before rendering "sessions/new", it will first check for 
# "users/sessions/new". It's turned off by default because it's slower if you 
# are using only default views. 
config.scoped_views = true 

添加自定義視圖:/app/views/subscribers/session/new.html.erb

建立航線/config/routes.rb

devise_for :subscribers 

然後,我添加自定義SubscriberSessionsController作爲/app/controllers/subscriber_session_controller.rb

class SubscriberSessionsController < Devise::SessionsController 

    before_filter :isInIframe 

    private 

     def isInIframe 
      @hide_navbar = session[:in_iframe] 
     end 

end 

和改性/config/routes.rb告訴想出使用這個新的控制器,而不是它的默認:

devise_for :subscribers, :controllers => { 
    :sessions => "subscriber_sessions" 
    } 

一旦我重啓我的服務器,Devise現在使用這個控制器,但忽略我的自定義視圖。

回答

2

正如情況經常如此,發佈問題後十分鐘我就破解了它。

原因Devise沒有發現它是在不同的文件夾中查找它。我的替換控制器被稱爲subscriber_sessions.rb所以設計不再在views/subscribers/sessions,但views/subscribers/subscriber_sessions看。

我解決了這個問題,以下內容:

改變了我的用戶路線:

devise_for :subscribers, :controllers => { 
    :sessions => "subscribers/sessions" 
    } 

改名我subscriber_sessions控制器只是會話和移動它變成一個用戶文件夾,所以它的新名字&位置都:app/controllers/subscribers/sessions_controller.rb

我還不得不爲該類添加一個名稱空間,以便新的sessions_controller.rb文件看起來像這樣「

class Subscribers::SessionsController < Devise::SessionsController 

    before_filter :isInIframe 

    private 

     def isInIframe 
      @hide_navbar = session[:in_iframe] 
     end 

end 
+0

這仍然是Rails 4和Devise 3.5的情況,模板路徑必須與類名相匹配。你應該接受你的答案是正確的。 – Barry

相關問題