2011-06-05 130 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