需要帮助:模型不起作用

时间:2015-12-18 22:48:56

标签: 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| 
        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_premium_subscription。我尝试输入随机字母,模型没有发现错误。为了更新,该模型如何采取行动?我把代码放在控制器中:

  def renew_subscription
    PremiumSubscription.renew_premium_subscription(current_user, @user)
  end

但那根本没有用。如果有人知道如何使这个东西工作,那将是伟大的。谢谢你的帮助:)

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

编辑2:没有这样的运气来解决这个问题。有人有线索吗?

编辑3:所以我虽然有些事情,有没有办法自动调用模型类。我只需要让这件事起作用。

以下是我所做的概述:

  1. 创建了一个rake任务。无论何时倒数为零,都会调用此rake任务。

  2. 我在premiumSubscription模型中创建了一个模型,该模型说明当它达到零时,它将更新订阅或销毁它。

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

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

1 个答案:

答案 0 :(得分:0)

几点说明:

user.save

这可能会失败。如果save不成功,则会返回false。您的方法不会测试返回值,因此不会注意到不成功的保存 - 没有任何内容写入日志文件,也不会引发错误,nada。检查save的结果或致电save!,这将引发异常。

premium_subscription.premium_subscription_days_left -= 1

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