[英]call instance method with class instance variable - ruby on rails
我正在尝试从控制器中的实例变量调用实例方法(在模型中定义),但无法完成该工作,并且服务器日志中显示
#<Admin的未定义方法`active_users'
控制者
@admin = Admin.first
@admin.active_users
管理员模型
def self.active_users
byebug
end
我知道我们可以像Admin.active_users
这样直接通过类调用它。
为什么类实例无法访问它?
active_users
方法是为Admin
对象而不是为其实例定义的。
我不知道您要做什么,但是消息接收者很重要。
要使@admin.active_users
工作,请定义一个方法和一个实例方法:
def active_users
byebug
end
事实是, active_users
(具有self
和不具有self
)都是实例方法。 只是为这些方法定义的对象是不同的。
具有self
的方法是“类实例方法”,而没有self
的方法是“实例方法”,例如,可由Admin
类的实例访问的方法。
如您的示例def self.something_method
,当您编写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'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.