[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
相关推荐
汤姆yu6 分钟前
基于springboot的健身爱好者打卡与互动交流系统
java·spring boot·后端
Maggie_ssss_supp21 分钟前
Linux-python
开发语言·python
Sunhen_Qiletian1 小时前
回归与分类的本质区别
人工智能·python
星星乘坐的船1 小时前
基于Kubernetes Python SDK实现Job创建
linux·python·kubernetes
W_Meng_H1 小时前
XXL-JOB - 集成 Python 执行器实战指南
linux·python
计算机毕设VX:Fegn08951 小时前
计算机毕业设计|基于springboot + vue连锁门店管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
一切尽在,你来1 小时前
AI 大模型应用开发前置知识:Python 类型注解全教程
人工智能·python·ai编程
喵手1 小时前
Python爬虫实战:地图 POI + 行政区反查(合规接口) - 商圈热力数据准备等!
爬虫·python·爬虫实战·零基础python爬虫教学·行政区反查·地图poi·商圈热力数据准备
南部余额2 小时前
SpringBoot文件上传全攻略
java·spring boot·后端·文件上传·multipartfile
小雨中_2 小时前
2.9 TRPO 与 PPO:从“信赖域约束”到“近端裁剪”的稳定策略优化
人工智能·python·深度学习·机器学习·自然语言处理