[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
相关推荐
AI机器学习算法32 分钟前
机器学习基础知识
数据结构·人工智能·python·深度学习·算法·机器学习·ai学习路线
2301_809204702 小时前
bootstrap怎么实现鼠标悬停切换图片预览功能
jvm·数据库·python
小徐学编程-zZ7 小时前
量产测试数据
python·压力测试·数据库架构
QQ8057806517 小时前
django基于机器学习的电商评论情感分析系统设计实现
python·机器学习·django
wx09097 小时前
stata实现机器学习的环境配置
python·机器学习·stata
养肥胖虎7 小时前
Docker学习笔记:后端、数据库和反向代理怎么一起跑起来
后端·nginx·docker·postgresql·go·部署
晓杰'8 小时前
从0到1实现 Balatro 游戏后端(2):NestJS框架搭建与项目结构设计
后端·websocket·typescript·node.js·游戏开发·项目实战·nestjs
无所事事O_o8 小时前
二次验证码TOTP 使用说明
后端·二次验证码·谷歌验证器
ltl8 小时前
Multi-Head Attention:为什么要分多个头
后端
nuowenyadelunwen9 小时前
CS 61A Lab 2 笔记:短路求值、高阶函数与 Lambda 表达式
python·函数式编程·cs61a·berkeley