Ruby on rails 需要帮助:模型不工作
所以我现在做的是我有一个rake任务,每天都会减少订阅的剩余天数。以下是rake任务:Ruby on rails 需要帮助:模型不工作,ruby-on-rails,Ruby On Rails,所以我现在做的是我有一个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|
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
但这根本不起作用。如果有人知道如何让这东西工作,那就太好了。谢谢你的帮助:)
编辑:尝试将更新功能放在rake任务中,但根本不起作用
编辑2:没有这样的运气得到修复。有人有线索吗
编辑3:我想问一下,有没有一种方法可以自动调用模型类。我只需要让这东西运转起来
以下是我所做工作的概要:
user.save
这可能会失败。如果save
不成功,它将返回false
。您的方法不会测试返回值,因此不成功的保存将不会被注意到—不会向日志文件写入任何内容,也不会引发任何错误,nada。检查保存的结果
或调用保存代码>,这将引发异常
premium\u subscription.premium\u subscription\u days\u left-=1
<>你可能有一个很好的理由来存储这个值,但是你也应该考虑存储开始日期(或者到期日期),并计算当前日期所剩的时间。减少“剩余天数”要求cron作业在应该运行时运行。。。如果错过一天,计数将被取消。几点注意:
user.save
这可能会失败。如果save
不成功,它将返回false
。您的方法不会测试返回值,因此不成功的保存将不会被注意到—不会向日志文件写入任何内容,也不会引发任何错误,nada。检查保存的结果
或调用保存代码>,这将引发异常
premium\u subscription.premium\u subscription\u days\u left-=1
<>你可能有一个很好的理由来存储这个值,但是你也应该考虑存储开始日期(或者到期日期),并计算当前日期所剩的时间。减少“剩余天数”要求cron作业在应该运行时运行。。。如果错过一天,计数将被关闭。您是否尝试为变量设置停止点。。?您显示的代码将继续减法,因为当它达到0时,不会告诉它停止。rake任务中的代码每天运行一次。我试图做的是,一旦它达到零,它就会触发这里显示的模型代码和控制器。然而,它是在零上(并且在一天中一直保持在零),但它仍然不会触发模型。啊,误读了它,我很抱歉。没关系,谢谢你的帮助:)你试过为变量设定一个停止点吗。。?您显示的代码将继续减法,因为当它达到0时,不会告诉它停止。rake任务中的代码每天运行一次。我试图做的是,一旦它达到零,它就会触发这里显示的模型代码和控制器。然而,它是在零上(并且在一天中一直保持在零),但它仍然不会触发模型。啊,误读了它,我道歉。没关系,谢谢你的帮助:)谢谢你。。。我没有想到cron的工作会失败。我会将其更新到代码中。现在你知道为什么续费订阅不起作用了吗?我认为代码是正确的,但从未调用过。再次感谢您的帮助:)您确定没有呼叫它吗?或者它被呼叫了,但没有达到你的预期?我很确定它没有被呼叫。我输入了一个简单的更新,将一天的剩余时间更改为300000,但在数据库中它仍然是-2。您是否正在检查save
的返回值?我尝试在控制器续订下键入一组随机字符,但它没有检查它是否是正确的方法或任何东西。谢谢。。。我没有想到cron的工作会失败。我会将其更新到代码中。现在你知道为什么续费订阅不起作用了吗?我认为代码是正确的,但从未调用过。再次感谢您的帮助:)您确定没有呼叫它吗?或者它被呼叫了,但没有达到你的预期?我很确定它没有被呼叫。我输入了一个简单的更新,将一天的剩余时间更改为300000,但在数据库中它仍然是-2。您是否正在检查save
的返回值?我尝试在控制器续订下键入一组随机字符,但它没有检查它是否是正确的方法或任何东西。
def renew_subscription
PremiumSubscription.renew_premium_subscription(current_user, @user)
end