[ruby on rails] concerns的使用

  • concern是用来把公共的方法提取到一起,保持代码DRY,是用module来实现的

model中的concern

ruby 复制代码
module Visible
  extend ActiveSupport::Concern

  VALID_STATUSES = ['public', 'private', 'archived']  # 其他地方引用  Visible::VALID_STATUSES
 
  # 关联关系 blongs_to, has_many 、validates、 scope 都需要写到 included block中
  included do
    belongs_to :user

    validates :status, inclusion: { in: VALID_STATUSES }
    validate do
      errors[:name] << '请输入名称' if name.to_s.splict(',').size < 2
    end
    
    scope :public_count, -> { where(status: 'public').count }
    
    # 类方法一
    def self.public_count
      where(status: 'public').count
    end
    
    # 类方法二
    class << self
      def public_count
        where(status: 'public').count
      end
    end
     
	# 实例方法
    def public?
      status == 'public'
    end
  end
  
  # 类方法三,写到 included 外面
  class_methods do
    def public_count
      where(status: 'public').count
    end
  end

  # 实例方法
  def archived?
    status == 'archived'
  end
end
相关推荐
川石课堂软件测试2 分钟前
接口测试需要注意的一些BUG
网络·数据库·python·单元测试·bug·压力测试·tornado
2401_853576502 分钟前
定时任务专家:Python Schedule库使用指南
jvm·数据库·python
熙胤8 分钟前
Spring Boot 3.x 引入springdoc-openapi (内置Swagger UI、webmvc-api)
spring boot·后端·ui
Oueii10 分钟前
如何为开源Python项目做贡献?
jvm·数据库·python
小鸡吃米…12 分钟前
Python 中的并发 —— 进程池
linux·服务器·开发语言·python
tumeng071116 分钟前
springboot项目架构
spring boot·后端·架构
Techblog of HaoWANG16 分钟前
目标检测与跟踪(10)-- Jetson Xavier NX刷机、移植&部署YOLOv8量化模型(中)
python·yolo·目标检测·onnx·量化部署
LES000LIE19 分钟前
Spring Cloud
后端·spring·spring cloud
万里沧海寄云帆24 分钟前
Vscode解决python venv虚拟环境问题
ide·vscode·python
2401_8914821727 分钟前
Python Web爬虫入门:使用Requests和BeautifulSoup
jvm·数据库·python