Rails:从代码运行控制器操作

时间:2016-08-01 17:16:41

标签: ruby-on-rails ruby-on-rails-4 rake rake-task

我想在我的Rails应用程序中自动执行任务,创建一个rake任务,几乎我需要的所有代码都在一个控制器动作中,我想只调用那个控制器动作而不是写“相同”代码我的任务并保存一些代码行。这可能吗?

1 个答案:

答案 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

这是我认为解决问题的好方法。希望你会喜欢我的想法。 :)