将自定义内部方法添加到控制器

时间:2012-04-04 18:53:48

标签: ruby-on-rails ruby

我是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>

有什么想法吗?

2 个答案:

答案 0 :(得分: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

  3. 请注意,您可能需要第一个解决方案:使has_register_session?成为实例方法。

答案 1 :(得分:0)

通过执行def self.blah,您创建了一个类方法,而您需要一个实例方法。

您可能还希望保护方法 - 默认情况下,所有公共方法都会作为操作公开。