使用类实例变量调用实例方法 - ruby​​ on rails

时间:2016-10-02 08:21:37

标签: ruby-on-rails ruby ruby-on-rails-4

我正在尝试从控制器中的实例变量调用实例方法(在模型中定义),但无法获得该工作和服务器日志说

  对于#<

未定义的方法`active_users'管理员

控制器

@admin = Admin.first
@admin.active_users

管理模式

def self.active_users
  byebug
end

我知道我们可以像Admin.active_users一样直接在课堂上调用它。

为什么不能通过类的实例访问它?

2 个答案:

答案 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'