[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
相关推荐
无心水6 分钟前
【文档解析】4、跨平台文档解析:JS/Go/C#全攻略
javascript·后端·golang·c#·架构师·大数据分析·分布式系统利器
所谓伊人,在水一方3337 分钟前
【机器学习精通】第1章 | 机器学习数学基础:从线性代数到概率统计
人工智能·python·线性代数·机器学习·信息可视化
AsDuang7 分钟前
Python 3.12 MagicMethods - 48 - __rmatmul__
开发语言·python
啊哈哈1213810 分钟前
从零构建 Multi-Agent 系统:SQLAgent + RAGAgent + 智能路由实战
人工智能·python
清汤饺子12 分钟前
用了大半年 Claude Code,我总结了 16 个实用技巧
前端·javascript·后端
墨染天姬14 分钟前
【AI】PyTorch/TF 也会变成考古?
人工智能·pytorch·python
ん贤3 小时前
Go channel 深入解析
开发语言·后端·golang
小陳参上5 小时前
用Python创建一个Discord聊天机器人
jvm·数据库·python
changhong19866 小时前
如何在 Spring Boot 中配置数据库?
数据库·spring boot·后端
minstbe7 小时前
IC设计私有化AI助手实战:基于Docker+OpenCode+Ollama的数字前端综合增强方案(进阶版)
人工智能·python·语言模型·llama