rails default_scope:为一个模型设置一个操作区域

本文介绍如何在Rails模型中使用default_scope宏来设置默认作用域,包括其在创建、读取和更新记录时的应用场景。通过示例展示了如何合并多个默认作用域,以及如何在继承和模块包含情况下应用默认作用域。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

default_scope(scope = nil)Link

Use this macro in your model to set a default scope for all operations on the model.

class Article < ActiveRecord::Base
  default_scope { where(published: true) }
end

Article.all # => SELECT * FROM articles WHERE published = true

The default_scope is also applied while creating/building are cord. It is not applied while updating a record.

Article.new.published    # => true
Article.create.published # => true

(You can also pass any object which responds to call to the default_scope macro, and it will be called when building thedefault scope.)

If you use multiple default_scope declarations in your model then they will be merged together:

class Article < ActiveRecord::Base
  default_scope { where(published: true) }
  default_scope { where(rating: 'G') }
end

Article.all # => SELECT * FROM articles WHERE published = true AND rating = 'G'

This is also the case with inheritance and module includes where the parentor module defines adefault_scope and the child or includingclass defines a second one.

If you need to do more complex things with a default scope, you canalternatively define it as a class method:

class Article < ActiveRecord::Base
  def self.default_scope
    # Should return a scope, you can call 'super' here etc.
  end
end


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值