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>

何か案が?

4

2 に答える 2

5

selfメソッドを定義すると、UsersControllerクラスオブジェクトを参照しますが、インスタンスメソッド内では、newインスタンスself参照します。UsersController

  1. メソッドをインスタンスメソッドにすることができます。

    def has_register_session?
      # code
    end
    

    selfその後、電話をかけるときにhas_register_session?も取り除くことができnewます。

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

    if UsersController.has_register_session?
      # code
    end
    

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

has_register_session?最初の解決策、つまりインスタンスメソッドの作成が必要になる可能性があることに注意してください。

于 2012-04-04T19:03:46.837 に答える
0

そうdef self.blahすることで、インスタンスメソッドが必要なのに対し、クラスメソッドを作成しました。

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

于 2012-04-04T19:02:27.270 に答える