Active Record: 数据库
ORM ( Object-relational Mapping)
Bridges the gap between relational databases ,app
which are designed around mathematical Set Theory and Objectthis
Oriented programming languages that deal with objects and their behaviorspa
* Greatly simplifies writing code for accessing the databasecode
*In rails, the model(usually) uses some ORM framwork.对象
Active Record is also the name of Rails' default ORMblog
1. Actuve Record has to know how to find your databse(When Rails is loaded, this info is read from config/database.yml file)排序
2.(Convention) There is a table with a plural name that corresponds to ActiveRecord::Base subclass with singular namehash
3.(Converntion) Expects the table to have a primary key named idit
Model and Migration:
rails g model person first_name last_name --- generate model
reload! --- After rake db:migrate
Active Record conventions:
*Class name is singular
*DB table name is plural
*Need to have an id primary key
Active Record CRUD:
Create:
有3种方法 在数据库中Create a record
1. 用空的构造器和(ghost) attributes 去设置数据而后call save 保存
2.传hash of attribute到构造器中而后call save 保存
3.用create方法,用hash去建立一个对象而后把它保存到数据库中(只需1步)
#1 p1=Person.new; p1.first_name = "Joe"; p1.last_name ="Smith" p1.save #2 p2 = Person.new(first_name: "John", last_name:"Doe"); p2.save #3 p3=Person.create(first_name:"Jane",last_name:"Doe")
Retrieve/Read :
1. find(id) or find(id1, id2)
若是没找到 抛出 RecordNotFound exception
2. first, last, take, all
返回你指望的结果或者nil 若是不存在
3. order(:column) or order(column: :desc)
排序返回的结果,升序或者降序
4.pluck
*allows to narrow down thich fields are coming back
*Need to call at the end!
Person.take 2 随机从数据库中抽出2个对象
Person.all.map { |person| person.first_name } map返回全部的first_name
Person.pluck(:first_name) 用法同上,不过是在database level
where(hash)
Person.where(last_name: "Doe") 返回名字里有Doe
Person.where(last_name: "Doe").first 第一个返回名字里有Doe的
Person.where(last_name: "Doe").pluck(:firtst_name) pluck is not active record
find_by(conditions_hash)
Person.find_by(last_name: "Doe") 只给一个record
Person.find_by(last_name: "xxx") #=> nil
Person.find_by!(last_name: "xxx") ActiveRecord::RecordNotFound: Couldn't find Person
limit: 限制返回多少条records
offset(n):跳过前面n条records
Person.count =>3 Person.all.map {|person| "#{person.first_name} #{person.last_name" } => ["Joe smithson", "John Doe", "Jane smithie"] Person.offset(1).limit(1).map {|person| "#{person.first_name} #{person.last_name "} =>["John Doe"]
Update:
1. 取出record,对它进行编辑而后save
2.检索你想要编辑的record,call update method 传新的变量的hash进去
Delete:
destory(id) 或者 destory
从数据库里移除特定的instance
先实例化一个对象,而后在移除以前执行回调
delete(id)
从数据库中删除特定行
delete_all
删除全部数据