0

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

例如。

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"]

每个帖子都有 valid_from、valid_until 和 act_status

act_status 有 3 个阶段(待定、激活和过期)

用户填写所有信息,

并且当“Time.now”遇到“valid_from”时,帖子将对所有用户有效,并且它的“act_status”将变为“activate”(@post.act_status = “activate”)

当 "Time.now" 遇到 "valid_until" 时,post 对其他用户无效并且 "act_status" 将变为 "expired"(@post.act_status = "expired")


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

在我看来,我可以在“用户”执行某些操作时更改值(触发某些操作,例如 CRUD)

但在我的情况下,用户只是保存价值,rails 应该触发该操作。

我没有任何想法来解决它。

如果您有一些说明或指南,请告诉我

谢谢..


  • 另外在模型中存储“act_status”选项是否有效?

    Post.rb

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

1 回答 1

1

您不需要任何这些act_status,只需创建范围并显示您想要的项目。

# 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
于 2017-03-28T15:28:58.150 回答