Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何计算过期时间以更新rails中的列

如何计算过期时间以更新rails中的列
EN

Stack Overflow用户
提问于 2014-01-08 04:16:25
回答 1查看 1.5K关注 0票数 2

我正在尝试找出计算用户订阅剩余天数的正确方法。

例如,用户在2013年12月25日签约一个月,并于2013年12月29日取消订阅。即使他在订阅4天后取消订阅,他的订阅应该在接下来的27天(以月为基准的31天)在计划A上运行。

我想我应该使用created_at和updated_at的订阅模式。到目前为止,我得到了

**机型: subscription.rb

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Subscription < ActiveRecord::Base

    before_save :set_expiry_date

    def set_expiry_date
        @remaining_days = Subscription.calculate(:created_at - Date.today)
        Subscription.expiry = '@remaining_days'
        Subscription.save
    end

end

类似的东西,但我在这里遗漏了一些东西,这可能是一种丑陋的方法。我猜这能帮助任何人理解我在找什么。

然后,我会在每天23:59以cron的身份运行一次rake,从其中的Subscription.expiry数字中删除1(天),当它找到一个0时,它会更新一些东西。虽然这是另一个问题,但是我把关于rake cron的东西放在这里,所以你可以看到我的目标。

EN

回答 1

Stack Overflow用户

发布于 2014-01-08 05:17:32

如果这是我的项目,我会采取不同的方法。我会将订阅到期时间设置为实际到期日期,而不是递减整数。这使得cron的工作更少,而且感觉像是很好的约会实践。。。您可以在到期后保留到期日期,这对于以后的数据分析可能很方便。如果您的程序中存在bug或cron无法运行怎么办?通过保持日期,您可以做一些详细的家庭作业,或者针对特定的队列重新运行您的crons。

如果我需要知道UI或API响应的订阅还有多少天,我可以在subscription类上调用一个类似于下面的remaining_days方法的方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def set_expiry_date
    #automatically adds a month
    #http://ruby-doc.org/stdlib-2.1.0/libdoc/date/rdoc/Date.html#method-i-next_month
    Subscription.expiry_date = Subscription.created_at.next_month
    Subscription.save
end

def remaining_days
    expired? ? 0 : (Date.today - Subscription.expiry_date).to_i
end

def expired?
  (Date.today - Subscription.expiry_date).to_i <= 0   
end

def expired_today?
  Date.today == Subscription.expiry_date
end

然后,我的日常cron在到期时会做一些事情(发送电子邮件恳求客户回来?)将只查找expired_today所在位置的订阅?== true。然后,我的cron还会忽略今天之前过期或尚未过期的订阅。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20986922

复制
相关文章
如何严格设置php中session过期时间
如何严格限制session在30分钟后过期! 1.设置客户端cookie的lifetime为30分钟; 2.设置session的最大存活周期也为30分钟; 3.为每个session值加入时间戳,然后在程序调用时进行判断;
全栈程序员站长
2022/07/08
2.2K0
[Memcache] memcache中的过期时间策略
1. memcached内部不会监视记录是否过期,而是在get时查看记录的时间戳,检查记录是否过期。 这种技术被称为 惰性过期。因此,memcached不会在过期监视上耗费CPU时间 ,与redis是有区别的.
唯一Chat
2020/03/19
1.1K0
redis如何设置定时过期_redis 设置过期时间[通俗易懂]
1、设置过期时间功能:即对存储在 redis 数据库中的值可以设置一个过期时间。作为一个缓存数据库,这是非常实用的。如我们一般项目中的 token 或者一些登录信息,尤其是短信验证码都是有时间限制的,按照传统的数据库处理方式,一般都是自己判断过期,这样无疑会严重影响项目性能。我们 set key 的时候,都可以给一个 expire time,就是过期时间,通过过期时间我们可以指定这个 key 可以存活的时间。
全栈程序员站长
2022/11/09
4.9K0
设置Redis中某个键的生存时间或过期时间以及过期删除策略
除了上述命令,还可以通过使用SET命令结合EX参数或PX参数进行设置键的过期时间。命令格式为:
一凡sir
2023/09/20
1.9K0
设置Redis中某个键的生存时间或过期时间以及过期删除策略
如何修改Linux用户过期时间
它还允许用户执行其他功能,例如设置帐户到期日期、在到期后将密码设置为无效、显示帐户时效信息、设置密码更改之前的最小和最大天数以及设置到期警告天数。
用户8418197
2021/03/28
6.5K0
Redis设置过期时间_redis过期时间原理
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
4K0
redission设置过期时间_设置redis过期时间
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
6.8K0
redission设置过期时间_设置redis过期时间
【C#】让DataGridView输入中实时更新数据源中的计算列
本文适用Winform开发,且DataGridView的数据源为DataTable/DataView的情况。
AhDung
2018/09/13
5.3K0
【C#】让DataGridView输入中实时更新数据源中的计算列
Laravel 中如何更方便的修改 Passport Personal Access Token 过期时间
认真看过 Laravel Passport 文档 的人应该知道,它的 Personal Access Token 是不支持自定义过期时间的,tokensExpireIn 对此类 token 无效,原文如下:
overtrue
2018/12/05
2.5K0
redis过期时间实现原理_redis过期时间实现原理
redis对存储值的过期处理实际上是针对该值的键(key)处理的,即时间的设置也是设置key的有效时间。Expires字典保存了所有键的过期时间,Expires也被称为过期字段。 四种处理策略
全栈程序员站长
2022/11/09
1.8K0
redis有效时间设置及时间过期处理_java设置cookie过期时间
参数1:是key 键 参数2:是值 是存入redis里的值 参数3:时间,类型为long 参数4:时间类型, 如:TimeUnit.MILLISECONDS 代表分钟 TimeUnit.SECONDS 代表秒,还有天,周,月,年自己测试
全栈程序员站长
2022/11/09
3.1K0
MySQL中"更新时间"字段的更新时点问题
我们在设计表时,通常为了记录数据插入和更新的时间,会定义两个字段,create_time/insert_time和update_time,按照需求,记录插入的时间,会存储到create_time/insert_time字段中,记录更新的时间,会存储到update_time字段中,当创建记录时,会同步更新create_time/insert_time和update_time,然而,当更新记录时,只会更新update_time字段。
bisal
2022/09/29
5.3K0
全网首发!SparkStreaming的mapWithState,timeout过期时间如何生效
当我在测试SparkStreaming的状态操作mapWithState算子时,当我们设置timeout(3s)的时候,3s过后数据还是不会过期,不对此key进行操作,等到30s左右才会清除过期的数据。
叫我阿柒啊
2022/05/09
5650
全网首发!SparkStreaming的mapWithState,timeout过期时间如何生效
Redis 键的生存时间和过期时间
Redis的键可以设置生存时间和过期时间,这个过期时间是如何设置的呢,可以简单看下:
Meteors
2021/12/08
1K0
redis设置过期时间
redis是在内存中进行缓存的,我们在设置redis缓存时,可以设置下过期时间。那么在设置时间到期后redis是如何进行数据删除的。
Tim在路上
2020/08/04
2.8K0
LocalStorage 设置过期时间?
以上问题都是日常开发中遇到的,所以有此记录,如果你有不同的解决方案,欢迎留言告诉哦,不同的思路带来不同的碰撞,哈哈。
执行上下文
2022/07/26
3.2K0
LocalStorage 设置过期时间?
Rabbit 过期时间 (TTL)
TTL, Time to Live 的简称,即过期时间 。 RabbitMQ 可以对消息和队列设置 TTL 。 设置消息的 TTL 目前有两种方法可以设置消息的 TTL。第一种方法是通过队列属性设置,队列中所有消息 都有相同的过期时间。第二种方法是对消息本身进行单独设置,每条消息的 TTL 可以不同。 如果两种方法同时使用,则消息的 TTL以两者之间较小的那个数值为准。消息在队列中的生存时间一旦超过设置 的 TTL 值时, 就会变成"死信" (Dead Message) ,消费者将无法再收到该消息 (不是绝
清风冷影
2019/07/16
1.6K0
Redis 设置过期时间
Redis 中有个设置时间过期的功能,即对存储在 redis 数据库中的值可以设置一个过期时间。
happyJared
2019/08/23
4K0
关于Redis过期时间的细节
之前无意间和一个朋友讨论过redis的key过期的问题,当key设置了过期时间如果key被更新过期时间还是否有效?
明明如月学长
2021/08/31
9360
关于Redis过期时间的细节
如何给localStorage设置一个过期时间?
点击上方'IT平头哥联盟'关注与您一起成长~ 用心分享 做有温度的攻城狮 引言   这个话题其实在上次分享<小程序填坑记里讲过了>已经讲过(大佬可绕过哦~),但后来群里/评论都有些同学,提到了一些疑问
苏南
2020/12/16
8890
如何给localStorage设置一个过期时间?

相似问题

Symfony过期时间计算

10

如何在Rails中获取cookie过期时间?

22

Rails中缓存的基于时间的过期?

22

如何使用Dalli更新MemCached中的过期时间?

22

Rails:如何设置会话cookie的过期时间

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文