在Ruby中实例化一个类并填充实例变量

Sam*_*uel 2 ruby ruby-on-rails

我有一种感觉,我在这里错过了很简单的东西.我有一个链接到外部服务的类.我想通过调用create方法或find方法来实例化它.两种方法都会通过创建节点或查找节点来填充带有哈希的实例变量"@node".

我有

class GenreInfluence

@@neo ||= Neography::Rest.new()
attr_accessor :node

def initialize
end

def self.create
    @node = @@neo.create_node
    self.new
end

def self.find(node_id)
    @node = @@neo.get_node(node_id)
    self.new
end

def get_hash
  @node
end
Run Code Online (Sandbox Code Playgroud)

如果我注释掉发生了什么,我可以看到它正在创建类并获得正确的哈希值:

theInstance = GenreInfluence.find(20)
theInstance.get_hash
Run Code Online (Sandbox Code Playgroud)

只返回零.为什么哈希没有存储在实例变量中?

Mic*_*ley 9

您不能在非实例(静态或类)方法中设置实例变量.此外,您的方法都返回self.new,这有效地返回没有设置实例变量的类的新实例.

如何在静态类方法中创建类的新实例,在该实例上设置变量,然后返回它(而不是返回self.new):

class GenreInfluence
  @@neo ||= Neography::Rest.new()
  attr_accessor :node

  def initialize
  end

  def self.create
    influence      = self.new
    influence.node = @@neo.create_node
    influence
  end

  def self.find(node_id)
    influence      = self.new
    influence.node = @@neo.get_node(node_id)
    influence
  end

  def get_hash
    @node
  end
end
Run Code Online (Sandbox Code Playgroud)