Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails项目的设计问题_Ruby On Rails_Ruby_Class_Web Applications - Fatal编程技术网

Ruby on rails RubyonRails项目的设计问题

Ruby on rails RubyonRails项目的设计问题,ruby-on-rails,ruby,class,web-applications,Ruby On Rails,Ruby,Class,Web Applications,我开始研究一个新的RubyonRails应用程序,它是配置文件中某些属性的CRUD接口。该过程类似于:CRUD RoR App>数据库>导出到配置文件 我的问题是什么是设计它的最佳方式(从DB导出到配置文件的后端部分)。假设配置文件与RoR应用程序位于同一台服务器上,我是否只需编写单独的类(在/lib中),这些类具有读取/写入配置文件的方法,并在我的模型中的“创建前”过滤器中包含/调用它们?创建一个在通过用户输入提示时修改自身的应用程序是一个非常糟糕的主意。它破坏了版本控制的好处,并且产生了许多

我开始研究一个新的RubyonRails应用程序,它是配置文件中某些属性的CRUD接口。该过程类似于:CRUD RoR App>数据库>导出到配置文件


我的问题是什么是设计它的最佳方式(从DB导出到配置文件的后端部分)。假设配置文件与RoR应用程序位于同一台服务器上,我是否只需编写单独的类(在/lib中),这些类具有读取/写入配置文件的方法,并在我的模型中的“创建前”过滤器中包含/调用它们?

创建一个在通过用户输入提示时修改自身的应用程序是一个非常糟糕的主意。它破坏了版本控制的好处,并且产生了许多令人困惑的bug

如果您需要在源中不能修改的用户可配置设置,请考虑建立一个设置/配置模型,该模型在数据库中存储键/值并对其进行大量缓存。p> 要记住的另一件事是,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版本切换,但是如果在执行类定义时应用程序可以访问配置值,则可以基于配置值执行相同的操作。如果您
加载
在其中执行此操作的类,那么如果/当配置值更改以获得此好处时,您总是可以
再次加载

本质上,这将允许您有一个设置,允许您的用户,例如,要求使用您在代码库中没有提到的特定验证器验证特定模型,前提是您的模型检查此类配置并定义验证器,如我所说


有意义吗?

是的,您可以简单地将ConfigFile视为不使用ActiveRecord的模型类。它可以与其他模型一起使用(不必进入/lib)

此类可以是Rails应用程序使用的文件的接口。不过,我不确定是否要在创建之前从一个网站上调用它。如果您计划每次重新生成整个文件,那么在只更新其中一部分时,您不会希望这样做,除非它非常小


您是否可以选择确定配置文件的格式?只需将model.to_yaml输出即可

是什么让你认为配置文件适用于rails应用程序?我明白你的意思,但配置文件适用于第三方应用程序(非rails)。它是一个后缀配置文件(纯文本)。因此,我不想每次都重新生成文件——只需添加/删除部分文件即可。
class ConfigFile #note no inheriting from AR::Base

  def import
    ...
  end

  def export
    ...
  end
end