簡體   English   中英

將Rails應用程序連接到現有數據庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM