1

Devise や Clearance などの認証 gem は独自の組み込みコントローラーを使用するため、それらをオーバーライドする際にいくつか質問があります。オーバーライドしようとするたびに、何かがうまくいかないようで、エラーの原因が正確にはわかりません。

たとえば、Devise で新しいユーザー コントローラーを作成するには、次のようなコントローラーを作成する必要があることを理解しています。

# app/controllers/registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController

すべて良い。def newここで、コントローラーのパーツに特定のものを追加したいとしましょう。

1.)def createコントローラの部分をそのままにしておくには、入れなければなりません

def create
    super
end

そうですか?それとも、新しいコントローラーでそれを参照する必要さえありますか?

2.) 入力すると

def new
    #my custom code here
end

それは元の Devise コントローラの一部を置き換えるdef newものですか、それとも追加するだけですか? つまり、私も入れなければなりませんか

resource = build_resource({})
respond_with_navigational(resource){ render_with_scope :new }

Devise registrations_controller.rbの def new 部分のデフォルトの動作はどれですか?

3.) Devise には、ログインしている場合にサインアップできないようにするフィルターがありますが、これをオーバーライドする必要があります。どうすればいいですか?registrations_controller.rbprepend_before_filter :require_no_authentication, :only => [ :new, :create, :cancel ]の部分と関係があると思いますが、よくわかりません。

Clearance にも同じ質問が当てはまりますが、ルートとファイルが少し異なります.. (どの認証ジェムを使用するかまだ決めていないため、Clearance についても尋ねています。Clearance は、コードが軽量であるため魅力的ですが、Devise.私も必要とする追加機能があります)。

4

1 に答える 1

1

1) その通りです。

2) 親のロジックを呼び出したい場合はsuper、サブクラス ロジックの適切なポイントで呼び出すことができます。

3) RegistrationsController をオーバーライドすると、 を呼び出すことができますskip_before_filter :require_no_authentication。これは完全にスキップする必要があるため、特定の条件で before フィルターが必要な場合は、別の before_filter を追加する必要があります。

于 2011-12-20T03:21:23.560 に答える