2

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

4

1 回答 1

2

通常情况下,在发布问题十分钟后,我就破解了它。

Devise 没有找到视图的原因是它在不同的文件夹中寻找它。我的替换控制器被调用subscriber_sessions.rb,所以 devise 不再查找views/subscribers/sessions但是views/subscribers/subscriber_sessions

我用以下方法解决了这个问题:

将我的订阅者路由更改为:

  devise_for :subscribers, :controllers => { 
    :sessions => "subscribers/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
于 2012-08-22T10:27:48.330 回答