全栈工程师成长记

编程重新定义人生

Scope的使用方法

Rails Model是MVC架构中的M,主要作用是接收controller的指令进行对database进行读写等数据操作。
由于在某些查询组合条件下需要用到较为复杂的语法,如果每次都要写类似的语法组合就会显得很累赘,不符合Rails两个哲学理念中的“不要重复自己”(另一个是“约定优于配置”)。用scope来对数据查询语法进行封装,在需要的地方直接引用一个或者多个scope,这样既可以简化代码,又利于代码的可读性。

举例:
以下为原本的查询语句
Product.where(name: "T-Shirt", hot: true, top: true)

将hot和top用scope进行定义
class Product < ActiveRecord::Base
scope :hot, -> { where(hot: true) }
scope :top, -> { where(top: true) }
end

在引用的时候
Product.top.hot.where(name: "T-Shirt")

这里有一篇文章写得蛮详细的,不过这个阶段还不能理解得很深。