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

时间:2015-07-21 16:58:35

标签: ruby-on-rails database conventions

我有一个客户端要求我帮助他们构建一个ruby应用程序来与为在php上运行的不同应用程序创建的数据库进行交互。问题是,由于数据库不是使用rails搭建的,因此它不遵循任何rails约定。例如,有一个名为form

的表

如果我运行命令rails generate model form,则rails会推断表格名称是 s

更多我不希望ruby执行任何迁移,因为数据已经存在于我想要的状态。有什么好办法可以解决这个问题吗?

4 个答案:

答案 0 :(得分:2)

您无需运行迁移即可拥有该模型。要么跳过它们(--no-migration),要么在生成后删除文件。至于表名,请查看table_name=primary_key=也可能很方便。

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

答案 1 :(得分:1)

config/database.yml

中照常指定连接详细信息
production:
  adapter: mysql
  host: somehost.somedomain.com
  port: 3306
  user: sqluser
  password: **********

您可以为不符合Rails惯例的ActiveRecord模型指定表名,如下所示:

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

如果某些列名称很麻烦,例如ActiveRecord具有特殊含义的保留字或列(例如&#34; type&#34;),那么您可以为它们设置自定义访问器,或者使用{{1} }。

alias_attribute

答案 2 :(得分:0)

有一些选项可用于旧数据库。如果表格是单数,您可以在config/application.rb

中设置
config.active_record.pluralize_table_names = false

答案 3 :(得分:0)

rails g model ModelName --migration=false命令将完成这项工作,此命令将创建您的模型ModelName而无需迁移。

此外,您需要为每个模型指定实际列名称:

Rails&gt; = 3.2(包括Rails 4 +):

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

Rails&lt; = 3.1:

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