rails 指南总结(一)——Model之Active Record 基础

1. Active Record 是什么?

  • Active Record 是 MVC 中的 M(模型),负责处理数据和业务逻辑(和model有关的逻辑)。
  • Active Record 负责创建和使用需要持久存入数据库中的数据
  • Active Record 实现了 Active Record 模式,是一种对象关系映射系统。(对象关系映射就是将对象与关系型数据库中的表连接起来)
  • ApplicationRecord 继承自 ActiveRecord::Base

2.Active Record 的功能

  • 表示模型之间的关系;
  • 表示模型之间的继承关系
  • 在对象存入数据库之前,进行模型验证

3 Active Record 中的“多约定少配置”原则

3.1 模型和数据库表的命名约定

3.1.1 默认的命名约定

  • Rails 把模型的类名转换成复数,然后查找对应的数据表。eg:Article --> articles
  • 如果类名由多个单词组成,应该按照 Ruby 的约定,使用驼峰式命名法,这时对应的数据库表将使用下划线分隔各单词。eg:LineItem --> line_items

3.3.2 覆盖命名约定

  • 使用 ActiveRecord::Base.table_name= 方法可以指定要使用的表名
class Product < ApplicationRecord
  self.table_name = "my_products"
end
  • 调用 set_fixture_class 方法,手动指定类名
class ProductTest < ActiveSupport::TestCase
  set_fixture_class my_products: Product
  fixtures :my_products
  ...
end
  • 使用 ActiveRecord::Base.primary_key= 方法指定表的主键:
class Product < ApplicationRecord
  self.primary_key = "product_id"
end

3.2 数据库表中的字段命名约定

  1. 外键:使用 singularized_table_name_id 形式命名
  2. 主键:默认情况下,Active Record 使用整数字段 id 作为表的主键。使用 Active Record 迁移创建数据库表时,会自动创建这个字段;

4.创建 Active Record 模型

创建 Active Record 模型,只要需要继承 ApplicationRecord 类

class Product < ApplicationRecord
end

5.CRUD:数据操作

5.1 创建

5.1.1 创建对象的两种方式

  • create 方法创建新对象,并将其存入数据库。
user = User.create(name: "David", occupation: "Code Artist")
  • new 方法实例化一个新对象,但不保存,调用 user.save 可以把记录存入数据库。
user = User.new
user.name= "David"
user.occupation = "Code Artist"
user.save

5.1.2 在 create 和 new 方法中使用块

在 create 和 new 方法中使用块会把新创建的对象拉入块中,初始化对象:

user = User.new do |u|
  u.name = "David"
  u.occupation = "Code Artist"
end

5.2 查询

5.3 更新

user = User.find_by(name: 'David')
user.name = 'Dave'
user.save
或
user.update(name: 'Dave')

如果想批量更新多个记录,可以使用类方法 update_all:

 User.update_all("email = '11@qq.com'")

5.4 删除

user.destroy

6 回调

7 迁移

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值