覆盖会话控制器阻止使用自定义视图

时间:2012-08-22 09:04:35

标签: ruby ruby-on-rails-3 session devise custom-view

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现在使用此控制器但忽略了我的自定义视图。

1 个答案:

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