将对象传递给另一个类

时间:2015-12-12 13:54:58

标签: ruby object reference

使用Clockwork,我会定期从我的数据库中提取对象并将它们传递给Sidekiq工作人员进行处理。如果我在将对象传递给Sidekiq工作者之前检查它们,我会看到它们拥有的所有字段。但是,在我传递它之后检查对象给出了我所假设的对象的引用。

发条功能

every(30.seconds, 'check_modems.job'){

  modem_list = Modem.all

  modem_list.each do |modem|
    TestWorker.perform_async(modem)
    puts(modem.inspect)
  end
}

上面的看跌期权的输出:

<Object id: 1, value: "15", ipaddress: nil>

我的工作函数接收对象:

def perform(test)
  puts(test.inspect)
end

和输出:

#<Object:0x00563977f06f48>"

从我能够找到的内容来看,Ruby是按值传递的,在这种情况下该值是一个引用,但是如何从此处向后移动并获得我需要的对象?

1 个答案:

答案 0 :(得分:3)

当您只传递简单标识符(例如易于序列化的数字或字符串)而不是复杂对象时,您的代码会更强大。

clockwork功能更改为以下内容:

modem_ids = Modem.pluck(:id)
modem_ids.each { |id| TestWorker.perform_async(id) }

你的工作人员:

def perform(modem_id)
  modem = Modem.find_by(id: modem_id)
  if modem
    # ...
  end
end