繁体   English   中英

带有类实例变量的调用实例方法-ruby on rails

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM