1

私は複数のモデル (正確には 3 つ) で Devise を使用しており、各ロールにはいくつかの異なる相互作用があります。たとえば、ユーザー モデルがサインアップした後、devise メソッドをオーバーライドして特定のウェルカム パスにリダイレクトし、雇用主モデルではクレジット カード フォームなどに誘導します。

その結果、すべてに名前空間を付ける必要があります。ビューとコントローラーの名前空間は難しくありませんが、すべてのデバイスコントローラーを指定せずにコントローラーの名前空間を設定する方法があるかどうか疑問に思っていました。

たとえば、基本的にこれを行う方法はありますか:

devise_for :employers, :controller => "employers"

これを行う代わりに:

devise_for :employers, :controllers => { 
 :registrations => "employers/registrations",
 :sessions => "employers/sessions",
 :confirmations => "employers/confirmations",
 :passwords => "employers/passwords",
 :unlocks => "employers/unlocks",
 :mailer => "employers/mailer"
}

些細なことのように思えるかもしれませんが、維持するモデルが 3 つある場合は、多少の負担がかかる可能性があります。

4

2 に答える 2

2

namespace 内の Deviseからの次の回答を見てください。routes.rb で名前空間を指定するだけでは、望ましい結果が得られません。必要なアクションごとにコントローラーを生成する必要があります。たとえば、セッションの場合、コントローラーの Employer 名前空間に Sessions という名前の新しいコントローラーを作成する必要があります。

bundle exec rails g controller employer/sessions

次に、devise セッション コントローラーから新しいセッション コントローラーをサブクラス化して、セッションを適切に処理するために必要なすべての Devise メソッドを取り込みます。

class Employer::SessionsController < Devise::SessionsController
end

config/routes.rb の 'devise_for :employers, :controller => "employers"' 行を次のように変更します。

devise_for :employers, :controllers => { :sessions => "employer/sessions" }

最後に、オプションの手順として、 app/views/employer/sessions ディレクトリにビューを生成できます。config/initializers/devise.rb 内で「config.scoped_views = true」を設定し、以下を実行して、雇用主にスコープされたビューを生成できます。

rails generate devise:views users

これにより、app/views/employer/sessions/new にテンプレートが生成されます。それ以外の場合、新しいセッション コントローラーはデフォルトのビュー テンプレートのみを使用します。

お役に立てれば!

于 2013-06-29T17:28:28.323 に答える
0

次のように言うだけで機能しdevise_for :employers, :path => "employers"ますか?

于 2012-09-01T02:24:02.203 に答える