2011-07-08 10 views
1

まだレールとルビーの初心者で、私が持っていた問題を修正して「スーパー」を追加した理由を理解しようとしています。 (実際にはなぜそれが今働くのかわかりません)rails3:「スーパー」を追加して動作させるものがありますが、理由は誰も説明できません。

私のレール3アプリはDeviseを使用しており、指定されていれば登録フォームの特定のフィールドを "詰め込む"必要がありますURLに...

は、例えば、私の通常の登録URLは空白のサインアップフォームを表示する

http://localhost:3000/users/register 

です。

私は何をやっていることが、すでに入力されreferral_codeフィールドと、URL

http://localhost:3000/users/register?referral_code=ABCDEF 

表示登録フォームを持っている。

私はすでに独自の工夫登録コントローラが動作していた(I理由新しいユーザーが電子メールの確認リンクをクリックする前にサインアップした後、カスタムの "あなたのメールチェック"ページにリダイレクトする必要があります)。私のroutes.rbをしたがってのように変更されます。

devise_for :users, :path_names => { :sign_up => "register"}, 
:controllers => { :registrations => "registrations" } 

、私の単純なカスタムは、登録コントローラは、現在のように見える工夫:私は私のカスタム「新しい」方法、ビューに「スーパー」を追加する前に

class RegistrationsController < Devise::RegistrationsController 
    def new 
    unless params[:refer].nil? 
     @initial_referred_by = params[:refer].upcase 
    end 
    super 
    end 

    protected 

    def after_inactive_sign_up_path_for(resource) 
    "/setup_awaiting_confirmation" 
    end 
end 

表示されたビューコードの行に「エラー」メソッドが見つからないというエラーがスローされますdevise_error_messages!

一方、私は今はうれしいです。しかし、実際にここで何が起こっているのか、ルビー+レールの速度を上げようとすると、なぜ「スーパー」が何であるのか、それが何をしているのかを理解したいと思っています。

私は他のコントローラメソッドをたくさん書いたことがありませんでした。だから私のメソッドとは何か関係がありますか?

答えて

1

superキーワードは、再定義されたときに元の実装方法から挿入されます(この場合はDevise::RegistrationsController.newメソッドを挿入します)。見た目に必要なものを扱うためにはオリジナルのコードが必要なので、必要なのです。まだ不明な点がある場合は、お尋ねください。

関連する問題