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