[英]Connect Rails Application To Existing Database
我有一個客戶端要求我幫助他們構建一個ruby應用程序來與為在php上運行的不同應用程序創建的數據庫進行交互。 問題是,由於數據庫不是使用rails搭建的,因此它不遵循任何rails約定。 例如,有一個名為form
如果我運行命令rails generate model form
那么rails將推斷表名是表單s
更多我不希望ruby執行任何遷移,因為數據已經存在於我想要的狀態。 有什么好辦法可以解決這個問題嗎?
您無需運行遷移即可擁有該模型。 跳過它們( --no-migration
)或生成后刪除文件。 至於表名,請查看table_name=
。 primary_key=
也可能很方便。
class Form << ActiveRecord::Base
self.table_name = 'form'
end
像往常一樣在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具有特殊含義的保留字或列(如“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
有一些選項可以使用舊數據庫。 如果表是單數,您可以在config/application.rb
設置它
config.active_record.pluralize_table_names = false
rails g model ModelName --migration=false
命令將完成這項工作,此命令將在不遷移的情況下創建Model ModelName
。
此外,您需要為每個模型指定實際列名稱:
Rails> = 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.