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类对象,但在实例方法内部newself指的是实例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 回答