作為java中的O/R Mapping的使用者來說,看到rails中的activeRecord的實現(xiàn)后不禁汗顏,原來O/R Mapping可以如此簡單。
我反復看過幾遍activeRecord的文檔,覺得其靈活之處不亞于hibernate,而且簡單實用。
現(xiàn)作筆錄如下:
1.關聯(lián)
n:1: belongs_to: XXXX
1:n: has_many:XXX
1:1: has_one :XXX
m:n: has_and_belongs_to_many:XXX
連接join: :through => :XXX (for ex:has_many :photos :through => :slides) rails 1.1才有此功能
特殊關聯(lián):
acts_as_list :列表
acts_as_tree :父子關系
acts_as_nested_set
class Slide < ActiveRecord::Base
? belongs_to :slideshow
? acts_as_list :scope => "slideshow_id"
? belongs_to :photo
end
表示sildes表中的slideshow_id為belongs_to :slideshow關系中的外鍵(FK)
class Category < ActiveRecord::Base
? acts_as_tree
end
?
2.級聯(lián)
has_many :XXX, dependent => true
3.設定主鍵:rails不支持復合主鍵,rails默認數(shù)據(jù)表中的主鍵名稱為id,如果您的主鍵不為id,如下設置:
class Photo < ActiveRecord::Base
? set_primary_key "created_at"
end
4.domain中的繼承關系
class Photographer < Person
end
class Person < ActiveRecord::Base
end
5.domain中的組件關系
CREATE TABLE people (
?? id INT AUTO_INCREMENT NOT NULL,
?? type VARCHAR(20),
?? name VARCHAR(20),
?? email VARCHAR(30),
?? street_address VARCHAR(30),
?? city VARCHAR(30),
?? state VARCHAR(20),
?? zip INTEGER(5),
?? camera VARCHAR(20),
?? PRIMARY KEY (id)
);
class Person < ActiveRecord::Base
? composed_of :address, :class_name => "Address",
????????????? :mapping => [[:street_address, :street_address],
?????????????????????????? [:city, :city],
?????????????????????????? [:state, :State],
?????????????????????????? [:zip, :zip]]
end
class Address
? def initialize(street_address, city, state, zip)
??? @street_address = street_address
??? @city = city
??? @state = state
??? @zip = zip
? end
? attr_reader :street_address, :city, :state, :zip
end
6.查找記錄
find_by_<column_name> find_by_id
find_by_<column_name>_and_<column_name> find_by_name_and_email(name, email)
7.驗證字段有效性
class Photo < ActiveRecord::Base
? validates_presence_of :filename 驗證是否為空
end
validates_format_of :email,
??????????????????? :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
validates_length_of :name, :within => 6..100???????????????????
8.事務處理
def transfer(from, to, amount)
? Account.transaction do
??? from.debit(amount)
??? to.credit(amount)
? end
end
?
?
?
posted on 2006-09-14 15:55
老妖 閱讀(4962)
評論(0) 編輯 收藏 所屬分類:
rails