我是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 :(得分:5)
self
定义方法时引用UsersController
类对象,但在实例方法new
中,self
引用实例 UsersController
。
您可以将方法设为实例方法:
def has_register_session?
# code
end
您也可以在self
中调用has_register_session?
时删除new
。
或者在课堂上调用方法:
if UsersController.has_register_session?
# code
end
而不是明确引用UsersController
,您可以执行self.class
。
请注意,您可能需要第一个解决方案:使has_register_session?
成为实例方法。
答案 1 :(得分:0)
通过执行def self.blah
,您创建了一个类方法,而您需要一个实例方法。
您可能还希望保护方法 - 默认情况下,所有公共方法都会作为操作公开。