如何将 ActiveRecord 模型 class 传递给 Resque
How to pass ActiveRecord model class to Resque
假设我有以下 Resque 工作:
class Archive
@queue = :file_serve
def self.perform(repo_id, branch = 'master')
repo = Repository.find(repo_id)
repo.create_archive(branch)
end
end
如果我想通过传递对象 ID 和对象的 class 使它更通用怎么办,这样我就可以做这样的事情:
class Archive
@queue = :file_serve
def self.perform(object_class, object_id, branch = 'master')
object = object_class.find(object_id)
object.create_archive(branch)
end
end
显然,这行不通,而且我不知道我 应该 做什么,所以如果有人可以提供一些指导,那将是真的赞赏!
我会将 class 的名称传递给作业,而不是 class 本身。然后你可以在名称上调用 constantize
以取回 class,然后在其上调用 find
。例如
def self.perform(class_name, object_id, branch = 'master')
object = class_name.constantize.find(object_id)
object.create_archive(branch)
end
假设我有以下 Resque 工作:
class Archive
@queue = :file_serve
def self.perform(repo_id, branch = 'master')
repo = Repository.find(repo_id)
repo.create_archive(branch)
end
end
如果我想通过传递对象 ID 和对象的 class 使它更通用怎么办,这样我就可以做这样的事情:
class Archive
@queue = :file_serve
def self.perform(object_class, object_id, branch = 'master')
object = object_class.find(object_id)
object.create_archive(branch)
end
end
显然,这行不通,而且我不知道我 应该 做什么,所以如果有人可以提供一些指导,那将是真的赞赏!
我会将 class 的名称传递给作业,而不是 class 本身。然后你可以在名称上调用 constantize
以取回 class,然后在其上调用 find
。例如
def self.perform(class_name, object_id, branch = 'master')
object = class_name.constantize.find(object_id)
object.create_archive(branch)
end