我想在我的Rails应用程序中自动执行任务,创建一个rake任务,几乎我需要的所有代码都在一个控制器动作中,我想只调用那个控制器动作而不是写“相同”代码我的任务并保存一些代码行。这可能吗?
答案 0 :(得分:0)
嗯,例如。假设您有使用来自Rake任务和使用客户端自动续订Stripe客户订阅。现在,您将编写如下的PORO课程:
class AutoRenewSubscription
attr_reader :coupon, :email
def initialize args = {}
@email = args[:email]
@coupon = args[:coupon]
#....
end
def run!
user_current_plan.toggle!(:auto_renew)
case action
when :resume
resume_subscription
when :cancel
cancel_subscription
end
end
#... some more code as you need.
end
您可以将该类放在app/services/auto_renew_subscription.rb
文件夹中。现在这个课程全球可用。所以,在控制器内部调用它,如:
class SubscriptionController < ApplicationController
def create
#.. some logic
AutoRenewSubscription.new(
coupon: "VXTYRE", email: 'some@email.com'
).run!
end
end
并且也从你的rake任务中调用它:
desc "This task is to auto renew user subscriptions"
task :auto_renew => :environment do
puts "auto renew."
AutoRenewSubscription.new(
coupon: "VXTYRE", email: 'some@email.com'
).run!
end
这是我认为解决问题的好方法。希望你会喜欢我的想法。 :)