本站首页    管理页面    写新日志    退出


«November 2025»
1
2345678
9101112131415
16171819202122
23242526272829
30


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7651576
建立时间:2006年5月29日




[Ruby on Rails]rails实战- (三)Active Record 初解
软件技术

lhwork 发表于 2007/1/20 11:02:14

作为java中的O/R Mapping的使用者来说,看到rails中的activeRecord的实现后不禁汗颜,原来O/R Mapping可以如此简单。我反复看过几遍activeRecord的文档,觉得其灵活之处不亚于hibernate,而且简单实用。现作笔录如下:1.关联n:1: belongs_to: XXXX1:n: has_many:XXX1:1: has_one :XXXm:n: has_and_belongs_to_many:XXX连接join: :through => :XXX (for ex:has_many :photos :through => :slides) rails 1.1才有此功能特殊关联: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 :photoend表示sildes表中的slideshow_id为belongs_to :slideshow关系中的外键(FK)class Category < ActiveRecord::Base  acts_as_treeend   2.级联has_many :XXX, dependent => true 3.设定主键:rails不支持复合主键,rails默认数据表中的主键名称为id,如果您的主键不为id,如下设置:class Photo < ActiveRecord::Base  set_primary_key "created_at"end4.domain中的继承关系class Photographer < Personend class Person < ActiveRecord::Baseend5.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]]endclass 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, :zipend6.查找记录find_by_<column_name> find_by_idfind_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,})$/ivalidates_length_of :name, :within => 6..100                    8.事务处理def transfer(from, to, amount)  Account.transaction do    from.debit(amount)    to.credit(amount)  endend


阅读全文(1752) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.750 second(s), page refreshed 144808839 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号