2012-04-04 82 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?'方法? – 2012-04-04 19:00:10

回答

5

self

  1. 你可以讓你的方法的實例方法:

    def has_register_session? 
        # code 
    end 
    

    調用newhas_register_session?時,也可以那麼擺脫self的。

  2. 或致電類中的方法:

    if UsersController.has_register_session? 
        # code 
    end 
    

    而不是引用UsersController明確,你可以做self.class

請注意,您可能需要第一個解決方案:使has_register_session?爲實例方法。

+0

好的,非常感謝! – 2012-04-04 19:26:38

0

通過做def self.blah你已經創建了一個類方法,而你想要一個實例方法。

您可能還想使該方法受保護 - 所有公共方法都默認顯示爲操作。

當你定義的方法是指 UsersController類對象,但實例方法 new內, self實例UsersController
相關問題