如何在Rails应用程序中创建新数据库?

时间:2010-10-14 00:04:41

标签: ruby-on-rails

我正在开发一个每个帐户都有一个数据库的Rails应用。 (我知道这本身就是一种有争议的方法,但我相信在这种情况下它是正确的。)

我想完全自动化创建新用户帐户的过程,这意味着我需要能够创建一个新数据库,并在Rails应用程序中以编程方式填充一些种子数据。

那么,我的问题是如何最好地做到这一点?我不认为我可以从应用程序内部运行迁移(或者,如果可以的话,如何运行?),并且只使用硬编码的CREATE TABLE语句在应用程序中运行直接的SQL查询似乎是一种非常笨拙的处理方式。那我应该采取什么方法呢?

提前感谢您的帮助!

大卫

1 个答案:

答案 0 :(得分:1)

这是我的应用程序所需的方法。该应用程序为许多远程嵌入式设备提供Web前端,后者又监控传感器。每个嵌入式设备都运行一个ruby客户端进程,该进程读取配置文件以确定其设置。需要能够添加新的传感器类型。

我的方法是每个传感器类型都有自己的数据表,由具有该传感器的每个设备写入。因此,为了能够创建新的传感器类型,我需要能够设置新表。

一个初始问题是远程嵌入式设备上没有rails应用程序 - 因此表名复数化是一个糟糕的计划,因为远程设备无法访问复数规则。因此我设置了

ActiveRecord::Base.pluralize_table_names = false

在config / environment.rb

每种传感器设备类型的数据都保存在SensorType模型中 - 该模型有两个字段 - 传感器名称和配置文件内容。

在SensorType模型类中,有以下方法:

  1. 解析配置文件以提取字段名称和类型
  2. 创建迁移以构建新模型
  3. 将数据库中的特定字段从通用字符串更改为char(17),因为它是用于索引的MAC地址
  4. 更改新模型代码以添加适当的belongs_to关系
  5. 构建用于列出表格中数据的部分模板(标题部分和line_item部分)
  6. 这些方法都通过create_sensor_table方法绑定在一起,该方法调用上述所有方法,并执行相应的require或load语句以确保立即加载新模型。这是从SensorTypeController中的create方法调用的,如下所示:

      # POST /device_types
      # POST /device_types.xml
      def create
        @sensor_type = SensorType.new(params[:sensor_type])
    
        respond_to do |format|
          if @sensor_type.save
    
            @sensor_type.create_sensor_tables
    
            flash[:notice] = 'SensorType was successfully created.'
            #etc