ActiveRecord是Rails提供的一個對象關系映射(ORM)層,從這篇開始,我們來了解Active Record的一些基礎內容,連接數據庫,映射表,訪問數據等。
Active Record使用基本的ORM模式:表映射成類,行映射成為對象,列映射成對象的屬性。與很多大量使用配置的ORM庫不同,Active Record最小化了配置。想象一下,有一個使用Active Record的程序把Mysql數據庫中的orders表轉換到類,通過制定的ID查找到order,設定order的名稱,然後保存回數據庫:
require "rubygems" require_gem "activerecord" ActiveRecord::Base.establish_connection(:adapter => "mysql", :host => "localhost", :database => "railsdb") class Order < ActiveRecord::Base end order = Order.find(123) order.name = "Dave Thomas" order.save
在上面的例子裡不需要任何配置,Active Record為我們做了這些事情,下面我們來看看ActiveRecord是怎樣工作的。
表和類
當你創建了一個ActiveRecord::Base類的子類,Active Record假定表名是復數的,而類名是單數的,當類名包括多個單詞時,表名被假定為單詞間帶有下劃線,復數形式不規則,例如:
類名 表名 類名 表名 Order orders LineItem line_items TaxAgency tax_agencies Person people Diagnosis diagnoses Quantity quantities Batch batches Datum data
默認的,Active Record的表名是復數的,類名是單數的,如果你不太習慣,可以通過設置一個全局標記來禁用它,在config目錄的environment.rb文件中設置:
ActiveRecord::Base.pluralize_table_names = false
單復數規則可以對付大部分情況,對於一些特殊情況,Active Record允許我們覆蓋默認的生成的表名,使用set_table_name命令,例如:
class Sheep < ActiveRecord::Base set_table_name "sheep" # Not "sheeps" end class Order < ActiveRecord::Base set_table_name "ord_rev99_x" # Wrap a legacy table... end