将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
答
的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
谢谢我也会这样看,但是@Phillip先回答,看起来更像传统的方式。 – richbai90
没问题。如果符合此模式,您可能不想设置所有这些表的表名 –