Ruby on rails 为Rails应用程序存储全局状态的最佳方法?
我有一个Rails应用程序,其中主持人可以管理Ruby on rails 为Rails应用程序存储全局状态的最佳方法?,ruby-on-rails,Ruby On Rails,我有一个Rails应用程序,其中主持人可以管理会议,普通用户可以参加这些会议 在某种程度上,管理员应该能够“半冻结”应用程序。这基本上是设定一段时间(我们称之为“冻结期”),在此期间会发生一些事情: 由于冻结期开始前创建的会议将很快包含在计算中,因此在冻结期内无法编辑会议 主持人可以继续创建新会议和编辑这些会议,因为这些新会议不会影响计算 网站上会出现解释这些问题的警告 原则上,我可以创建一个冻结期模型,但实际上我不需要一次存储几个冻结期,因为一旦冻结期结束,它们就会被丢弃 因此,我正在寻找
会议
,普通用户可以参加这些会议
在某种程度上,管理员应该能够“半冻结”应用程序。这基本上是设定一段时间(我们称之为“冻结期”),在此期间会发生一些事情:
- 由于冻结期开始前创建的会议将很快包含在计算中,因此在冻结期内无法编辑会议
- 主持人可以继续
创建
新会议和编辑
这些会议,因为这些新会议不会影响计算
- 网站上会出现解释这些问题的警告
原则上,我可以创建一个冻结期
模型,但实际上我不需要一次存储几个冻结期,因为一旦冻结期结束,它们就会被丢弃
因此,我正在寻找一种“全局状态”类型的方法。这仍然应该存储在数据库中,但可能没有关联的模型
这有意义吗?例如,最佳实践是否包括将“单例模型”存储在数据库中的方法?我认为,使用具有以下属性的冻结期
模型将是一个很好的设计:
- 开始日期
- 结束日期
然后,您可以编写逻辑来检查当前是否存在活动冻结期
使用此方法,您可以保留冻结期的历史记录,也可以计划将来的冻结。创建模型以将此设置保存到,并在迁移中仅创建一条记录:
class CreateFrozenPeriod < ActiveRecord::Migration
def change
create_table :frozen_periods do |t|
t.boolean :active
end
end
# create 1 record to store settings to.
FrozenPeriod.create
end
您还可以使用与上述操作相同的工具,它有助于通过设置扩展模型。Rails.cache
是存储此类临时状态的好地方。请确保您使用的不是文件存储。谢谢,@SergioTulentsev!如果这个冻结期可能会持续两周,这是否成立?取决于缓存后端,它是否会发生意外的密钥过期等:)为了安全起见,我会将其存储在数据库中<代码>如果FrozenPeriod.count>0;显示警告
。然后,在完成之后,删除所有冻结的时段,这样表就又空了。这里的可能性是无限的。同意。我希望有一个“单例模型”的选项,rails知道如何找到唯一的一个<代码>如果FrozenPeriod.active;例如,显示警告。这不是过度工程化了吗?他显然不需要这些高级功能(历史记录和日程安排),这取决于你的品味。我几乎不会把一个有3-4列和12行的表称为过度工程。好吧,但与他要求的一个布尔标志相比,它是过度工程了。这也要看情况而定。如果一个利益相关者进来问“嘿,谁把这个小小的bool标志设置为true”?如果你不知道答案,你可能会遇到麻烦:)真的,真的:)
class FrozenPeriod
def self.active?
FrozenPeriod.first.active
end
def self.active= val
FrozenPeriod.first.update_column(:active, val)
end
end