我有一个客户端要求我帮助他们构建一个ruby应用程序来与为在php上运行的不同应用程序创建的数据库进行交互。问题是,由于数据库不是使用rails搭建的,因此它不遵循任何rails约定。例如,有一个名为form
如果我运行命令rails generate model form
,则rails会推断表格名称是 s
更多我不希望ruby执行任何迁移,因为数据已经存在于我想要的状态。有什么好办法可以解决这个问题吗?
答案 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