Ruby on rails RubyonRails在典型日期激活post

Ruby on rails RubyonRails在典型日期激活post,ruby-on-rails,schedule,canactivate,Ruby On Rails,Schedule,Canactivate,我想激活一个由用户安排的典型日期的帖子 并更新模型中的数据 比如说 Post schema t.string :title t.text :body t.datetime :valid_from t.datetime :valid_until t.string :act_status, default: "padding #["pending", "activate", "expired"] 每个帖子都有有效的开始、结束和行动状态 act_状态有3个阶段:挂起、激活和过期 用户填写所有信息 当

我想激活一个由用户安排的典型日期的帖子 并更新模型中的数据

比如说

Post schema
t.string :title
t.text :body
t.datetime :valid_from
t.datetime :valid_until
t.string :act_status, default: "padding #["pending", "activate", "expired"]
每个帖子都有有效的开始、结束和行动状态

act_状态有3个阶段:挂起、激活和过期

用户填写所有信息

当Time.now遇到valid_from时,post将对所有用户有效,其act_状态将更改为activate@post.act_status=activate

当Time.now遇到valid_时,post将对其他用户无效,act_状态将更改为expired@post.act_status=过期

我的问题是,rails如何在典型日期自动更改值

在我看来,当用户执行某些操作时,我可以更改值

但在我的例子中,用户只是保存了值,rails应该启动该操作

我没有办法解决它

如果你有一些指示或指南,请让我知道

谢谢

此外,在模型中存储act_状态选项是否有效

Post.rb

validates :act_status, inclusion: { in: %w(padding activate finish) }

您不需要任何这种行为状态,只需创建作用域并显示所需的项即可

# in your model
scope :pending, -> { where('valid_until < now()') }
scope :active, -> { where('now() between valid_from AND valid_to') }
scope :expired, -> { where('valid_from > now()') }


# in your controller
@pending_posts = Post.pending
@active_posts = Post.active
@expired_posts = Post.expired

谢谢你,冰人。这对我帮助很大。我认为当我希望用户在一段时间内只能激活一篇帖子时,act_状态是必要的。例如,两个帖子不能同时激活。如果我想补充这个想法,你有什么建议吗?很高兴听到,如果它解决了你的问题,就把它作为一个答案。