我有一个Rails应用,主持人可以管理meetings
,普通users
可以参加这些会议。
在某些时候,管理员应该能够"半冻结"该应用程序。这基本上是设定一段时间(让我们称之为"冻结时期"),在此期间会发生一些事情:
edit
。create
次新会议和edit
次会议,因为这些新会议不会影响计算。原则上我可以创建一个FrozenPeriod
模型,但我实际上并不需要一次存储几个冻结时段,因为它们一旦结束就会被丢弃。
因此,我正在寻找一个全球状态"类型方法。这应该仍然存储在数据库中,但可能没有相关的模型。
这有意义吗?最佳实践包括一种拥有单身模型的方法"存储在数据库中,例如?
答案 0 :(得分:2)
创建模型以将此设置保存到,并在迁移中仅创建1条记录:
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
使用此模型作为单身来设置和获取值:
class FrozenPeriod
def self.active?
FrozenPeriod.first.active
end
def self.active= val
FrozenPeriod.first.update_column(:active, val)
end
end
您也可以使用与上述相同的Rails Settings Cached,并且可以扩展带有设置的模型。
答案 1 :(得分:1)
我认为拥有具有以下属性的FreezePeriod
模型将是一个很好的设计:
然后,您可以编写逻辑来检查当前是否存在活动的冻结期。
使用此方法可以保留冻结期的历史记录,并且您还可以在将来安排冻结。