我正在开发一个每个帐户都有一个数据库的Rails应用。 (我知道这本身就是一种有争议的方法,但我相信在这种情况下它是正确的。)
我想完全自动化创建新用户帐户的过程,这意味着我需要能够创建一个新数据库,并在Rails应用程序中以编程方式填充一些种子数据。
那么,我的问题是如何最好地做到这一点?我不认为我可以从应用程序内部运行迁移(或者,如果可以的话,如何运行?),并且只使用硬编码的CREATE TABLE语句在应用程序中运行直接的SQL查询似乎是一种非常笨拙的处理方式。那我应该采取什么方法呢?
提前感谢您的帮助!
大卫
答案 0 :(得分:1)
这是我的应用程序所需的方法。该应用程序为许多远程嵌入式设备提供Web前端,后者又监控传感器。每个嵌入式设备都运行一个ruby客户端进程,该进程读取配置文件以确定其设置。需要能够添加新的传感器类型。
我的方法是每个传感器类型都有自己的数据表,由具有该传感器的每个设备写入。因此,为了能够创建新的传感器类型,我需要能够设置新表。
一个初始问题是远程嵌入式设备上没有rails应用程序 - 因此表名复数化是一个糟糕的计划,因为远程设备无法访问复数规则。因此我设置了
ActiveRecord::Base.pluralize_table_names = false
在config / environment.rb
中每种传感器设备类型的数据都保存在SensorType模型中 - 该模型有两个字段 - 传感器名称和配置文件内容。
在SensorType模型类中,有以下方法:
这些方法都通过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