2

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はこのコントローラーを使用しますが、カスタムビューを無視します。

4

1 に答える 1

2

よくあることですが、質問を投稿してから10分後に私はそれをクラックしました。

Deviseがビューを見つけられなかった理由は、別のフォルダーでビューを探していたためです。私の交換用コントローラーが呼び出されsubscriber_sessions.rbたため、deviseはもう調べていませんでしviews/subscribers/sessionsviews/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
于 2012-08-22T10:27:48.330 に答える