3

Rails 3.2.8 アプリには、マウント可能なエンジン authentify があり、ユーザーの認証を処理し、アプリ全体のセッション変数を生成します。authentify を別の Rails エンジン rfqx と統合する場合、エンジン rfqx は、エンジン authentify によって生成されたセッション変数にアクセスする必要があります。問題は、セッション変数がエンジン rfqx で使用できず、nil であることです。

rfqx の routes.rb では、authentify は次のようにマウントされています。

 mount Authentify::Engine => "/authentify"  

エンジン rfqx でセッション変数を使用できるようにするにはどうすればよいですか?

4

1 に答える 1

2

Rails Edgeガイドから:

4.3.2 アプリケーションが提供するコントローラを使用する

Rails コントローラーは通常、認証やセッション変数へのアクセスなどのコードを共有するため、デフォルトでは ApplicationController を継承します。ただし、Rails エンジンはメイン アプリケーションから独立して実行するようにスコープが設定されているため、各エンジンはスコープが設定された ApplicationController を取得します。この名前空間はコードの競合を防ぎますが、多くの場合、エンジン コントローラーはメイン アプリケーションの ApplicationController のメソッドにアクセスする必要があります。このアクセスを提供する簡単な方法は、エンジンのスコープ ApplicationController を変更して、メイン アプリケーションの ApplicationController から継承することです。私たちの Blorgh エンジンの場合、これは app/controllers/blorgh/application_controller.rb を次のように変更することによって行われます。

class Blorgh::ApplicationController < ApplicationController
end

デフォルトでは、エンジンのコントローラーは Blorgh::ApplicationController から継承します。したがって、この変更を行うと、メイン アプリケーションの一部であるかのように、メイン アプリケーションの ApplicationController にアクセスできるようになります。

この変更には、ApplicationController を持つ Rails アプリケーションからエンジンを実行する必要があります。

于 2013-09-22T09:56:19.690 に答える