作为java中的O/R Mapping的使用者来说,看到rails中的activeRecord的实现后不禁汗颜,原来O/R Mapping可以如此简单。
我反复看过几遍activeRecord的文档,觉得其灵活之处不亚于hibernate,而且简单实用。
现作笔录如下:
1.关联
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才有此功能
特殊关联:
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.级联
has_many :XXX, dependent => true
3.设定主键:rails不支持复合主键,rails默认数据表中的主键名称为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
分享到:
相关推荐
Rails 3中的Active Record的查询变化.doc
rails2-sample good book
Persist data for your web application with Active Record Work with forms Apply a test-driven development approach to your Rails-based web applications Discover many Rails secrets and tips
Ruby on Rails与MongoDB 您可以在MongoDB的帮助下轻松... rails new ruby-on-rails-with-mongodb --skip-active-record从您的Gemfile中删除sqlite3(如果存在),将Mongoid添加到您的Gemfile中,然后运行“ bundle”。
rails3-railsconf2010
Rails进行敏捷Web开发(所有版本的源码rails3.0-4.0) 3.0,3.1,3.2,4.0
Ruby on Rails Tutorial - Learn Web Development with Rails 3rd
rails-dev-box, 面向 Ruby on Rails 核心开发的虚拟机 用于 Ruby on Rails 核心开发的虚拟机简介注意:这个虚拟机不是为 Rails 应用程序开发而设计的,只是为。 这个项目自动设置开发环境,以便在 Ruby on Rails ...
active_record_upsert, Rails 5/Active Record 5的更新更新 ActiveRecordUpsertpostgre 9.5 和 Rails 5/ActiveRecord 5的真正更新。 在冲突时使用进行更新。的主要点是否在单个记录上使用 ON CONFLICT DO U
Agile Web Development with Rails 1-14节_ppt(老师发的修正版)
rails-angular-postgres-and-bootstrap-second-edition 英文原版
Pro Active Record. Databases with Ruby and Rails - Kevin Marshall, Chad Pytel, Jon Yurek 2007版,带目录。
基于Ubuntu Nginx Mongrel Mysql部署rails monit-5.0
rails3-mongoid-devise, 示例 Rails 3.2应用,带有数据 Mongoid,用于验证 Rails 4.1有关设计的Rails 4.1示例应用程序,请参见:rails设计有一个用于设计的教程:Rails 设计教程。类似示例和教程这是来自 RailsApps...
webpack-rails-demo 该存储库演示了Rails 4.2应用程序中基本用法。...创建了新的Rails项目: rails new --skip-keeps --skip-active-record --skip-spring --skip-turbolinks --skip-test-unit webpack-rails-demo
rails-exporter-源码.rar
todo-rails4-angularjs, Rails 4和AngularJS集成的展示 Rails 4和AngularJS集成的展示这是一个待办事项列表管理应用程序,用 Rails 4和AngularJS编写。 任务支持CRUD操作以及drag&拖放排序和通过弹出式日历设置的...
rails-documentation-2-0-2
rails new rspec-rails-cookies-bug --skip-action-mailer --skip-action-mailbox --skip-action-text --skip-active-record --skip-active-storage --skip-action-cable --skip-sprockets --skip-spring --skip-...