gpt4 book ai didi

ruby-on-rails - Rails ActiveJob 可以用来对代码块进行排队吗?

转载 作者:行者123 更新时间:2023-12-04 18:04:30 26 4
gpt4 key购买 nike

可以使用 Rails 的新 ActiveJob API 来对代码块进行排队吗?有时我不想生成作业并在那里移动逻辑。它将我宁愿保留在那里的知识从我的模型中移出。

让我举一个我目前正在从事的项目中的例子。这有点奇怪,但它让我可以将所有知识保留在我的模型中。

# app/models/subscription.rb
class Subscription < ActiveRecord::Base
def cancel
CancelSubscriptionJob.perform(self)
end

def cancel_tasks
# stuff that takes a long time
end
end

# app/jobs/cancel_subscription_job.rb
class CancelSubscriptionJob < ActiveJob::Base
def perform(subscription)
subscription.cancel_tasks
end
end

我觉得我要绕过我的手肘才能把我的 !@# 放在这里。我猜想可以说 cancel_tasks 方法属于作业,但我不喜欢这样。我想查看模型中的取消任务,我一直在其中保留此类知识的其余部分。

还有一种说法是,这些从一开始就不属于模型,但在 Rails 中的某个时刻,我觉得所有人都告诉我要做的是提取、提取和提取,直到我从未完成任何实际工作.

最佳答案

理论上您可以使用一些元编程来动态构建一个子类,它遵循 ActiveJob 规范,但我认为这比您需要的更困惑。

我只是创建一个调用您的模型方法的精简 ActiveJob,实际上是它的包装器。

顺便说一句,还有一个很好的论据是保持模型精简并专注于持久性而不是您想要排队的业务逻辑。在这种情况下,从模型中提取业务逻辑是一件好事。有些人说你可以使用作业类来保持逻辑,但我个人更愿意让它们也保持精简,而不是在 service classes 中有逻辑。 .

关于ruby-on-rails - Rails ActiveJob 可以用来对代码块进行排队吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29378322/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com