需要帮助:模型不起作用



所以我要做的是,我每天都有一个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:所以我想,有没有一种方法可以自动调用模型类。我只需要把这件事做好。

以下是我所做的概述:

  1. 创建了一个rake任务。每当倒计时到零时,都会调用此rake任务。

  2. 我在premiumSubscription模型中创建了一个模型,它说当订阅为零时,它要么更新订阅,要么销毁订阅

  3. 我已经将计数设置为零,刷新了页面,但订阅没有更新或销毁。

编辑4:所以我了解到控制器需要由一条路线触发。有什么方法可以在页面加载时触发此代码吗?

几个注意事项:

user.save

这可能会失败。如果save不成功,它将返回false。您的方法不测试返回值,因此不成功的保存将被忽略——日志文件中没有写入任何内容,也没有引发任何错误,nada。检查save的结果或调用save!,这将引发异常。

premium_subscription.premium_subscription_days_left -= 1

您可能有充分的理由存储此值,但也应该考虑存储开始日期(或到期日期),并计算给定当前日期的剩余天数。减少"剩余天数"要求cron作业在应该。。。如果错过了一天,计数将关闭。