我正在尝试从控制器中的实例变量调用实例方法(在模型中定义),但无法获得该工作和服务器日志说
对于#<未定义的方法`active_users'管理员
控制器
@admin = Admin.first
@admin.active_users
管理模式
def self.active_users
byebug
end
我知道我们可以像Admin.active_users
一样直接在课堂上调用它。
为什么不能通过类的实例访问它?
答案 0 :(得分:2)
active_users
方法是为Admin
对象定义的,而不是为其实例定义的。
我不知道你要做什么,但是信息接收者很重要。
要使@admin.active_users
正常工作,请为实例方法定义方法:
def active_users
byebug
end
问题是,active_users
(有和没有self
)都是实例方法。只是这些方法定义的对象不同。
self
的方法是“类实例方法”,而没有self
的方法是“实例方法”,例如类Admin
的实例可以访问的方法。
答案 1 :(得分:0)
当您编写def self.something_method
时,方法仅适用于课程,如您的示例所示。如果您想要object
的创建方法,则必须创建不带self
的方法,如下所示:def something_method
。
例如:
class Admin
def self.class_method
p 'class method'
end
def something_method
p 'method for object'
end
end
@admin = Admin.create(something_params)
# You can also use 'Admin.new', but it will not save your admin in database, or 'Admin.first', like in your example.
@admin.something_method
#=> 'method for object'
@admin.class_method
#=> not working :(
Admin.something_method
#=> not working :(
Admin.class_method
#=> 'class method'