2012-04-04 15 views
0

私はRoRで新しく、何かの前に特定のセッションの存在を確認したいコントローラ(UsersController)があります。セッションの検証コードはいくつかの方法でも同じですし、私は自分自身を繰り返したくないので、私がセッションをチェックするために私のコントローラに新しいメソッドを作ることを決めた:コントローラに独自の内部メソッドを追加する

class UsersController < ApplicationController 
    def index 
    end 

    def show 
    end 

    def new 
     if self.has_register_session? 
      # Does something 
     else 
      # Does something else 
     end 
    end 

    def edit 
    end 

    def create 
    end 

    def update 
    end 

    def destroy 
    end 

    def self.has_register_session? 
     # true or false 
    end 
end 

をそして私は、ページを実行すると/users/newこのエラーが発生しました:

undefined method `has_register_session?' for #<UsersController:0x1036d9b48> 

+0

なぜ、インスタンスではなくクラスのメソッドを「has_register_session?」にしていますか? –

答えて

5

self、メソッドを定義UsersControllerクラスオブジェクトを指すが、インスタンスメソッドnewselfUsersControllerインスタンスを指します。

  1. あなたのメソッドインスタンスメソッドにすることができ、次のいずれかだけでなくnewhas_register_session?を呼び出すときは、その後、selfを取り除くことができます

    def has_register_session? 
        # code 
    end 
    

  2. またはクラスにメソッドを呼び出します。

    if UsersController.has_register_session? 
        # code 
    end 
    

    代わりに明示的self.classを行うことができUsersControllerを参照します。

おそらく最初の解決策が必要です。has_register_session?をインスタンスメソッドにすることをお勧めします。

+0

さて、ありがとう! –

0

def self.blahを実行すると、インスタンスメソッドを必要としながら、クラスメソッドが作成されます。

また、メソッドをprotectedにすることもできます。すべてのパブリックメソッドは、デフォルトでアクションとして公開されます。

関連する問題