Ruby on rails 需要帮助:模型不工作

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|

所以我现在做的是我有一个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
但这根本不起作用。如果有人知道如何让这东西工作,那就太好了。谢谢你的帮助:)

编辑:尝试将更新功能放在rake任务中,但根本不起作用

编辑2:没有这样的运气得到修复。有人有线索吗

编辑3:我想问一下,有没有一种方法可以自动调用模型类。我只需要让这东西运转起来

以下是我所做工作的概要:

  • 创建了一个rake任务。只要倒计时到零,就会调用此rake任务

  • 我在premiumSubscription模型中创建了一个模型,表示当它达到零时,它将更新订阅或销毁订阅

  • 我已将计数设置为零,刷新了页面,但订阅未更新或销毁

  • 编辑4:所以我了解到控制器需要由路由触发。当页面加载时,有没有办法触发此代码?

    请注意:

    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