2011-12-20 9 views
1

DeviseやClearanceなどの認証用の宝石には独自のコントローラが組み込まれているため、オーバーライドするときにいくつか質問があります。私がそれを無効にしようとするたびに、何かが間違っているように見え、正確に何がエラーを引き起こしたのかわかりません。DeviseまたはClearanceコントローラのオーバーライドについて

# 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 

を入力した場合、それはオリジナルの工夫コントローラのdef new一部を置き換えない、またはそれだけで、それに追加していますか?言うことを意味、私はまた、Devise registrations_controller.rbのデフ新しい一部のデフォルト動作である

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

に入れなければならないのですか?

3.)Deviseには、ログインしているときにサインアップできないフィルタがありますが、これを無効にする必要があります。これはどうすればいいですか?私はそれがprepend_before_filter :require_no_authentication, :only => [ :new, :create, :cancel ]registrations_controller.rbの部分と関係があると推測していますが、私はあまりよく分かりません。

同じ質問がクリアランスにも適用されますが、ルートとファイルが少し異なります(まだ使用する認証宝石を決定していないため、クリアランスも求めています) - 軽量のためクリアランスが私に訴えますコードがありますが、Deviseには私が必要とする追加の機能があります)。

答えて

1

1)正しいです。

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

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

+0

ありがとうございました。私はwikiのすべての言葉を読んでいるが、どこでもそれを見つけることはできないと誓っている。ちょっとフォローアップの質問:コントローラーの 'def new'部分だけを変更する必要がある場合は、' def create super'(そして 'def edit'、' def update'など)を新しいregistrations_controller.rbも同様ですか? – cdotfeli

+0

いいえ、変更したいメソッドだけを定義できるはずです。 –

関連する問題