2011-06-05 128 views
2

我開始研究一個新的Ruby on Rails應用程序,該應用程序是包含在配置文件中的特定屬性的CRUD界面。該過程將如下所示:CRUD RoR App>數據庫>導出到配置文件。Ruby on Rails設計問題項目

我的問題是什麼是最佳的設計方式(從數據庫導出到配置文件的後端部分)。假設配置文件與RoR應用程序位於同一臺服務器上,我是否可以編寫單獨的類(在/ lib中),它們具有讀取/寫入配置文件的方法,並在模型中的before_create過濾器中包含/調用它們?

回答

1

是的,您可以簡單地將ConfigFile視爲不使用ActiveRecord的模型類。它可以和你的其他模型一起使用(不必進入/ lib)。

class ConfigFile #note no inheriting from AR::Base 

    def import 
    ... 
    end 

    def export 
    ... 
    end 
end 

該類可以是文件的接口,由Rails應用程序使用。我不確定從before_create調用它。如果您計劃每次都重新生成整個文件,那麼當其中一部分進行更新時,您不會希望這樣做,除非它非常小。

你有選擇確定配置文件的格式嗎?只需輸出model.to_yaml,就完成了!

+0

這是一個Postfix配置文件(純文本)。所以,我不想每次重新生成文件 - 只需添加/刪除它的一部分。 – 2011-06-05 02:07:15

2

創建一個應用程序,當通過用戶輸入提示時會自行修改是一個非常糟糕的主意。它打敗了版本控制的好處,並且造成了許多令人困惑的錯誤。

如果您需要某些用戶可配置的設置,無法在源中進行修改,請考慮構建一個設置/配置模型,該模型將關鍵字/值存儲在數據庫中並大量緩存它們。

要記住的另一件事是Ruby類定義就像普通代碼一樣執行。例如,您可以執行以下操作:

class Foo 
    if RUBY_VERSION == '1.9.2' 
    def self.bar 
     # do something 1.9.2 style 
    end 
    else 
    def self.bar 
     # do something 1.8.7 style 
    end 
end 

這個例子顯示了一個比較常見的Ruby版本的切換,但你可以做基於配置同樣的事情,值如果他們的應用程序訪問的類定義時,執行。如果您在load這個類中執行此操作,您可以隨時load它再次如果/當配置值更改以獲得此優勢時。

從本質上講,這將允許您設置一個設置,允許您的用戶例如要求某個特定模型通過您在代碼庫中沒有提到的特定驗證程序進行驗證,前提是您的模型將檢查此類配置並定義驗證器,就像我在說的那樣。

有意義嗎?

+0

什麼讓你認爲配置文件是爲rails應用程序? – DGM 2011-06-05 01:18:19

+0

我明白你的意思,但配置文件是爲第三方應用程序(非Rails)。 – 2011-06-05 02:06:19

+0

Gotcha。很明顯,我誤解了這個問題。 – coreyward 2011-06-05 16:25:46