Devise(2.1)正在使用我的自定义视图,直到我告诉它使用自定义控制器。现在它忽略了我的自定义视图。
以前一切正常:
告诉Devise在/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使用这个新控制器而不是默认控制器:
devise_for :subscribers, :controllers => {
:sessions => "subscriber_sessions"
}
我重新启动服务器后,Devise现在使用此控制器但忽略了我的自定义视图。
答案 0 :(得分:2)
情况经常如此,在发布问题十分钟后我就破解了它。
Devise没有找到视图的原因是它在不同的文件夹中查找它。我的替换控制器被称为subscriber_sessions.rb
所以设计不再是views/subscribers/sessions
而是views/subscribers/subscriber_sessions
}。
我用以下方法解决了这个问题:
将我的订阅者路线更改为:
devise_for :subscribers, :controllers => {
:sessions => "subscribers/sessions"
}
将我的subscriber_sessions控制器重命名为仅会话并将其移动到订阅者文件夹中,以便将其新名称&amp;位置是: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