ActiveRecord(三)

查询

从数据库中获取数据

  • find
  • first
  • take
  • last
  • find_each

    1
    2
    3
    User.find_each(batch_size: 3) do |user|
    puts user.id
    end
  • find_in_batches

    1
    2
    3
    User.find_in_batches(batch_size: 3) do |users|
    puts users.count
    end

条件查询

>where


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
User.where("name = 'mazi'")

User.where("name = 'mazi' AND id = 39")

str = 'maizi'
User.where("name = ?", str)

User.where("id > 52")

num = 55
User.where("id < ?", num)

User.where("id < ? AND name = ?", num, str)

User.where(:name => 'maizi', :id => 55)

User.where.not(:name => 'maizi', :id => 55)

排序


升序
1
User.where.not(:name => 'maizi', :id => 55).order(:created_at => :ASC)

降序

1
User.where.not(:name => 'maizi', :id => 55).order(:created_at => :DESC)

查询指定字段


1
User.where.not(:name => 'maizi', :id => 55).order(:created_at => :DESC).select(:name)

分页查询

  • limit
  • offset
1
User.where.not(:name => 'maizi').order(:created_at => :DESC).select(:name, :created_at).limit(1).offset(1)
1
2
3
4
5
6
7
8
9

time = 0
User.where.not(:name => 'maizi').order(:created_at => :DESC).select(:name, :created_at).limit(10).offset(time)

time = 1
User.where.not(:name => 'maizi').order(:created_at => :DESC).select(:name, :created_at).limit(10).offset(time)

time = 2
User.where.not(:name => 'maizi').order(:created_at => :DESC).select(:name, :created_at).limit(10).offset(time)

分组查询


1
2
3
4
5
6
7
8
9
10
11
i = 0
User.find_each do |user|
if i%2 == 0
user.gender = '女'
else
user.gender = '男'
end
user.money = i+20
user.save
i += 1
end

1
2
3
4
5
result = User.select("gender", "sum(money) as total_money").group("gender")

result.first

result.first.total_money
1
2
3
4
5
result = User.select("gender", "sum(money) as total_money").group("gender")

result.first

result.first.total_money
1
result = User.select("gender", "sum(money) as total_money").group("gender").having("sum(money) > ?", 120)

条件覆盖

  • unscope
  • only
  • reorder
  • reverse_order
  • rewhere
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    User.select("id", "created_at").limit(5).unscope(:limit)

    User.select("id").limit(5).offset(2).only(:limit, :offset)

    User.select("id").order(:id => :DESC)

    User.select("id").order(:id => :DESC).reorder(:id)


    User.select("id").order(:id => :DESC).reorder(:id)

    User.select("id").order(:id => :DESC).reverse_order

只读对象


1
User.readonly.first

文章目录
  1. 1. 从数据库中获取数据
  2. 2. 条件查询
    1. 2.1. >where
  3. 3. 排序
  4. 4. 查询指定字段
  5. 5. 分页查询
  6. 6. 分组查询
  7. 7. 条件覆盖
  8. 8. 只读对象
|