Ruby / Rails按ID查找对象

时间:2014-09-25 12:57:13

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

我有一个从类(Popsicles)生成的对象,它被传递给另一个类(PopsicleProcessor),只有Popsicle对象的ID,“保证”(UUID)是唯一的。如何从PopsicleProcessor类访问Popsicle对象而不必做一些坏事,比如将整个Popsicle对象作为参数传递?

我的应用程序没有数据库来查找这些对象,它们纯粹存在于应用程序的内存中,直到处理完毕为止。

我真的不知道如何实现这一点,特别是因为它被卸载到Resqueue队列上,该队列将再次启动应用程序的整个实例 - 因此传递对象本身会导致大量性能损失(缩放),据我所知。

一般来说,如何做到这一点(因为Resqueue根本不应该有所作为)。

我希望能够从其他类访问对象实例变量和方法。

这是我现在正在做的事情的摘录,但这不起作用。

popsicles.rb

class Popsicles

    require "securerandom"

    @someID


    def initialize params

        @someID = SecureRandom.uuid

    end

    def doSomething

        Resque.enqueue( popsicleProcessor, @someID )

    end

end

popsicles_processor.rb

# Worker class
class PopsiclesProcessor

  # Requires a @queue instance variable
  @queue = :popsicle_queue

  # Needs to take same argument we passed to enqueue method
  def self.perform( popsicle_id )

    # Get the object somehow

    # Now we can call other methods like changeFlavour, or whatever

  end

end

1 个答案:

答案 0 :(得分:2)

您的工作人员在不同的进程中运行实际上是相关的,因为它将拥有自己的内存空间,而无法访问在主应用程序进程中创建的Popsicle对象。如果你只是想用另一个进程中的ID加载它们,你需要有一些方法来持久化Popsicle对象。如果您不能使用数据库,则必须序列化对象或将其数据的各个组件传递给工作人员,以便可以在工作进程中从头开始重构。