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)
只返回零.为什么哈希没有存储在实例变量中?
您不能在非实例(静态或类)方法中设置实例变量.此外,您的方法都返回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)