Active Record:

ORM ( Object-relational Mapping)
Bridges the gap between relational databases ,

which are designed around mathematical Set Theory and Object

Oriented programming languages that deal with objects and their behavior

* Greatly simplifies writing code for accessing the database

*In rails, the model(usually) uses some ORM framwork.

Active Record is also the name of Rails' default ORM

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 name

3.(Converntion) Expects the table to have a primary key named id

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步)

#
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 #
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

删除所有数据

RoR - Introduction to Active Record的更多相关文章

  1. RoR - More Active Record

    Active Record Scope: default_scope:   默认的检索方式 #Use unscoped to break out of the default class Hobby ...

  2. Yii的学习(5)--Active Record的关联

    官网原文:http://www.yiiframework.com/doc/guide/1.1/zh_cn/database.arr 官网中后半段为英文,而且中文的内容比英文少一些,先放到这里,之后有时 ...

  3. Yii的学习(4)--Active Record

    摘自Yii官网:http://www.yiiframework.com/doc/guide/1.1/zh_cn/database.ar 在官网原文的基础上添加了CDbCriteria的详细用法. 虽然 ...

  4. Active Record 数据库模式-增删改查操作

    选择数据 下面的函数帮助你构建 SQL SELECT语句. 备注:如果你正在使用 PHP5,你可以在复杂情况下使用链式语法.本页面底部有具体描述. $this->db->get(); 运行 ...

  5. DAL、DAO、ORM、Active Record辨析

    转自:http://blog.csdn.net/suiye/article/details/7824943 模型 Model 模型是MVC中的概念,指的是读取数据和改变数据的操作(业务逻辑).一开始我 ...

  6. Active Record: 資料庫遷移(Migration) (转)

    Active Record: 資料庫遷移(Migration) Programming today is a race between software engineers striving to b ...

  7. Android开源库--ActiveAndroid(active record模式的ORM数据库框架)

    Github地址:https://github.com/pardom/ActiveAndroid 前言 我一般在Android开发中,几乎用不到SQLlite,因为一些小数据就直接使用Preferen ...

  8. Active Record快速入门指南

    一.概述 Active Record(中文名:活动记录)是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录.关系型数据库往往通过外键来表述实体关系,A ...

  9. Yii Active Record 查询结果转化成数组

    使用Yii 的Active Record 来获取查询结果的时候,返回的结果集是一个对象类型的,有时候为了数据处理的方便希望能够转成数组返回.比如下面的方法: // 查找满足指定条件的结果中的第一行 $ ...

随机推荐

  1. 表表达式,Substring, CharIndex, 多行数据变同一行的用法

    参考: https://www.cnblogs.com/cnki/p/9561427.html https://www.cnblogs.com/johnwood/p/6386613.html 1.表1 ...

  2. Spark的历史与发展(目录)

    对于一个具有相当技术门槛与复杂度的平台,Spark从诞生到正式版本的成熟,经历的时间如此之短,让人感到惊诧.2009年,Spark诞生于伯克利大学AMPLab,最开初属于伯克利大学的研究性项目.它于2 ...

  3. seaJS简介和完整实例

    什么是 seaJS ? 和requireJS相似的,seaJS 也是用JavaScript编写的JS框架,主要功能是可以按不同的先后依赖关系对 JavaScript 等文件的进行加载工作,可简单理解为 ...

  4. python用matplotlib画折线图

    折线图: import matplotlib.pyplot as plt y1=[10,13,5,40,30,60,70,12,55,25] x1=range(0,10) x2=range(0,10) ...

  5. web多站点跨域访问

    有时项目app和m 需要公用一套接口 这个时候就要用到跨域:特别是app接口跨域访问站点时. 跨域配置: 1.iis服务器上需要安装URLwrite2.0 2.web.config 需要添加这个配置: ...

  6. 把去世的亲友做成聊天机器人,就能让生者慰藉、死者安息吗? - 看了 寻梦历险记,我的回答是 :是的,他/她永远活在我们心里 www.iremember.com.cn

    AppU 如今的我们,之所以离不开手机和互联网,是因为它们确实可以带来信息和方便,让我们轻松记录并分享自己的生活体验,留下了充满回忆的各种文字.语音,各种图片.视频…… 但你有没有想过,当我们逝世时, ...

  7. C# 在while循环中new的对象

    一: 问:那每次循环都会new一个A?那内存不是会满吗?还是说要把这个初始化对象的动作放到循环外面的写法会比较好? while(true) { A a = new A(); ... sleep(100 ...

  8. 【OCP、OCM、高可用等】小麦苗课堂网络班招生简章(从入门到专家)--课程大纲

    [OCP.OCM.高可用等]小麦苗课堂网络班招生简章(从入门到专家)--课程大纲 小麦苗信息 我的个人信息 网名:小麦苗 QQ:646634621 QQ群:618766405 我的博客:http:// ...

  9. MYSQL 文件类型

    首先, 表结构文件 : 1) *.frm是描述了表的结构, 数据及索引文件 如果是MyISAM引擎,则是 1) *.MYD保存了表的数据记录, 2) *.MYI则是表的索引 对于 InnoDB引擎,则 ...

  10. MyCat(一) - 初体验

    前提: 1.安装JDK 2.安装MySQL 3.搭建了MySQL主从 1.下载MyCat,官网:http://www.mycat.io/ wget http://dl.mycat.io/1.6-REL ...