我有一個客戶端要求我幫助他們構建一個ruby應用程序,以與爲運行在php上的不同應用程序創建的數據庫接口。問題是由於數據庫沒有使用軌道腳手架,因此它不遵循任何軌道約定。例如,有一個名爲form
將Rails應用程序連接到現有數據庫
如果我運行命令rails generate model form
然後將鐵軌推斷出表名稱表的形式小號
進一步,我不想因爲數據紅寶石執行任何遷移已經在我想要的狀態了。有沒有什麼好的方法來解決這個問題?
我有一個客戶端要求我幫助他們構建一個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
沒問題。如果符合此模式,您可能不想設置所有這些表的表名 –