将Rails应用程序连接到现有数据库

问题描述:

我有一个客户端要求我帮助他们构建一个ruby应用程序,以与为运行在php上的不同应用程序创建的数据库接口。问题是由于数据库没有使用轨道脚手架,因此它不遵循任何轨道约定。例如,有一个名为form将Rails应用程序连接到现有数据库

如果我运行命令rails generate model form然后将铁轨推断出表名称表的形式小号

进一步,我不想因为数据红宝石执行任何迁移已经在我想要的状态了。有没有什么好的方法来解决这个问题?

您不需要运行迁移来获取模型。跳过它们(--no-migration)或在生成后删除文件。至于表名,请看table_name=primary_key=也可能得心应手。

class Form << ActiveRecord::Base 
    self.table_name = 'form' 
end 

有一些选项与传统数据库的工作。如果表是单数,你可以设置你的config/application.rb

config.active_record.pluralize_table_names = false 
+0

谢谢我也会这样看,但是@Phillip先回答,看起来更像传统的方式。 – richbai90

+0

没问题。如果符合此模式,您可能不想设置所有这些表的表名 –

rails g model ModelName --migration=false命令将做的工作,该命令将创建模型ModelName没有迁移。

此外,你需要为每个模型作为指定真实列名:

滑轨> = 3.2(包括Rails 4+):

class ModelName < ActiveRecord::Base 
    self.table_name = 'custom-table-name' 
end 

Rails的< = 3.1 :

class ModelName < ActiveRecord::Base 
    self.set_table_name 'custom-table-name' 
end 

指定的连接细节照常

production: 
    adapter: mysql 
    host: somehost.somedomain.com 
    port: 3306 
    user: sqluser 
    password: ********** 

可以为ActiveRecord模型不符合Rails的惯例,像这样指定表名:

class Form < ActiveRecord::Base 
    self.table_name = 'tblForms_tbl' 
end 

如果某些列名很麻烦,比如保留字或列对ActiveRecord有特殊意义(比如“type”),那么你可以为它们设置自定义访问器,或者使用alias_attribute

class Form < ActiveRecord::Base 
    self.table_name = 'tblForms_tbl' 
    self.primary_key = 'formID' 
    self.inheritance_column = :_type_disabled 

    alias_attribute :formsTitle, :title 

    # use self.category as an accessor for the "type" column 
    def category=(type) 
    attr_writer :type, type 
    end 

    def category 
    attr_reader :type 
    end 

end