2015-08-17 36 views
2

我有一個Rails應用程序,主持人可以管理meetings,而普通users可以參加這些會議。爲Rails應用程序存儲全局狀態的最佳方式?

在某些時候,管理員應該能夠「半凍結」應用程序。這基本上是設置在一段時間(我們稱之爲「凍結期」),在此期間,一些事情發生了:

  • 爲冰凍期開始之前創建的會議將很快納入計算,他們不能在凍結期間被編輯爲edit
  • 版主可以繼續create新會議和edit這些會議,因爲這些新會議不會影響計算。
  • 警告出現在網站周圍解釋這些問題。

原則上我可以創建一個FrozenPeriod模型,但我實際上並不需要一次存儲幾個凍結的時間段,因爲一旦他們結束就被丟棄。

因此,我正在尋找一種「全局狀態」類型的方法。這應該仍然存儲在數據庫中,但可能沒有關聯的模型。

這是否有意義?例如,最佳做法是否包含一種將「單一模型」存儲在數據庫中的方法?

+0

'Rails.cache'是存儲這種臨時狀態的好地方。只要確保你使用的不是文件存儲。 –

+0

謝謝@SergioTulentsev!但是,如果這個凍結期可能持續兩週,這是否成立? – gdiazc

+0

取決於您的緩存後端,它是否會執行意外的密鑰過期等。:)爲了安全起見,我會將其存儲在數據庫中。 '如果FrozenPeriod.count> 0; show_warning'。然後,完成後,只需刪除所有凍結的時間段,以便表格再次爲空。 –

回答

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

我認爲這將是很好的設計有一個FreezePeriod模型具有以下屬性:

  • 起始日期
  • END_DATE

然後,您可以編寫邏輯來檢查是否有當前積極的凍結期。

使用此方法可讓您保留凍結期的歷史記錄,並且您還可以安排將來凍結。

+0

這不是過度工程?他顯然不需要任何這種高級功能(歷史和時間安排)。 –

+0

這取決於你的口味。我幾乎不會用3-4列和十幾行過度設計的表格。 –

+0

嗯,但它是過度工程設計的,與他要求的一個布爾標誌相比。 –

相關問題