2015-07-21 72 views
0

我有一個客戶端要求我幫助他們構建一個ruby應用程序,以與爲運行在php上的不同應用程序創建的數據庫接口。問題是由於數據庫沒有使用軌道腳手架,因此它不遵循任何軌道約定。例如,有一個名爲form將Rails應用程序連接到現有數據庫

如果我運行命令rails generate model form然後將鐵軌推斷出表名稱表的形式小號

進一步,我不想因爲數據紅寶石執行任何遷移已經在我想要的狀態了。有沒有什麼好的方法來解決這個問題?

回答

0

有一些選項與傳統數據庫的工作。如果表是單數,你可以設置你的config/application.rb

config.active_record.pluralize_table_names = false 
+0

謝謝我也會這樣看,但是@Phillip先回答,看起來更像傳統的方式。 – richbai90

+0

沒問題。如果符合此模式,您可能不想設置所有這些表的表名 –

0

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 
1

指定的連接細節照常

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