ruby-on-rails - 在 Ruby 中实例化一个类并填充实例变量

标签 ruby-on-rails ruby

我觉得我在这里遗漏了一些非常简单的东西。我有一个链接到外部服务的类。我想通过调用创建方法或查找方法来实例化它。这两种方法都将通过创建节点或查找节点来使用散列填充实例变量“@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

如果我注释掉发生了什么,我可以看到它正在创建类并返回正确的散列:

theInstance = GenreInfluence.find(20)
theInstance.get_hash

只返回零。为什么散列没有存储在实例变量中!?

最佳答案

您不能在非实例(静态或类)方法中设置实例变量。此外,您的两个方法都返回 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

关于ruby-on-rails - 在 Ruby 中实例化一个类并填充实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5190465/

相关文章:

javascript - 如何防止可操作消息显示两次?

ruby-on-rails - has_many和:after_add/:before_add => callback for << and create methods

ruby - 如何使用 Ruby 从 Ubuntu 连接到在 Windows 中运行的 MS SQL Server?

ruby - 字符串#count 选项

ruby - 使用 Aquarium 的 Ruby 异常处理中的 SystemStackError(面向方面​​的编程)

ruby-on-rails - 如何在 ruby​​ 中将 MM/DD/YYYY 转换为时间?

ruby-on-rails - 如何检查连接条件?

ruby - rspec 失败错误 : expected false to respond to `false?`

ruby-on-rails - 在 Ruby 中使用 Symbol#to_proc 简写的链接方法?

ruby-on-rails - Ruby on Rails : getting associated values to display