所以我要做的是,我每天都有一个rake任务,它将减少订阅的剩余天数。这是rake任务:
namespace :delete do
desc 'Remove a day for premium subscription days left'
task :premium_subscription_remove => :environment do
PremiumSubscription.find_each do | premium_subscription|
premium_subscription.premium_subscription_days_left -= 1
premium_subscription.save
end
end
end
此rake任务将倒计时订阅的剩余天数。现在,我创建了一个新的模型,一旦它达到零,它将处理剩余的天数。一旦它达到零,代码将导致订阅自动续订。这是续订的代码:
def self.renew_premium_subscription(user, premium_subscribe)
if premium_subscribe.premium_subscription_days_left <= 0
user.premium_subscriptions.where(:premium_subscribe_id => premium_subscribe.id).destroy_all
if user.points >= premium_subscribe.premium_subscription_cost
user.premium_subscriptions.where(:premium_subscribe_id => premium_subscribe.id).first_or_create
user.points = user.points - premium_subscribe.premium_subscription_cost
user.save
end
end
end
我遇到的问题是premium_subscription_days_left为负2,而renew_premum_subscribe从未被执行过。我试着随意输入字母,但模型没有出错。如何对该模型进行更新?我在控制器中输入了代码:
def renew_subscription
PremiumSubscription.renew_premium_subscription(current_user, @user)
end
但这根本没有奏效。如果有人知道如何让这件事发挥作用,那就太好了。感谢您的帮助:)
edit:尝试将更新功能放在rake任务中,但根本不起作用。
编辑2:没有这样的运气得到修复。有人知道线索吗?
编辑3:所以我想,有没有一种方法可以自动调用模型类。我只需要把这件事做好。
以下是我所做的概述:
创建了一个rake任务。每当倒计时到零时,都会调用此rake任务。
我在premiumSubscription模型中创建了一个模型,它说当订阅为零时,它要么更新订阅,要么销毁订阅
我已经将计数设置为零,刷新了页面,但订阅没有更新或销毁。
编辑4:所以我了解到控制器需要由一条路线触发。有什么方法可以在页面加载时触发此代码吗?
几个注意事项:
user.save
这可能会失败。如果save
不成功,它将返回false
。您的方法不测试返回值,因此不成功的保存将被忽略——日志文件中没有写入任何内容,也没有引发任何错误,nada。检查save
的结果或调用save!
,这将引发异常。
premium_subscription.premium_subscription_days_left -= 1
您可能有充分的理由存储此值,但也应该考虑存储开始日期(或到期日期),并计算给定当前日期的剩余天数。减少"剩余天数"要求cron作业在应该。。。如果错过了一天,计数将关闭。