[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
相关推荐
小智RE0-走在路上18 分钟前
Python学习笔记(13) --Mysql,Python关联数据库
数据库·python·学习
YJlio20 分钟前
杨利杰YJlio|博客导航目录(专栏总览 + 推荐阅读路线)
开发语言·python·pdf
Swizard20 分钟前
数据不够代码凑?用 Albumentations 让你的 AI 模型“看”得更广,训练快 10 倍!
python·算法·ai·训练
程序员码歌23 分钟前
短思考第266天,玩IP路上的几点感悟,这几点很重要!
前端·后端·创业
智算菩萨24 分钟前
【Python机器学习】决策树与随机森林:解释性与鲁棒性的平衡
python·决策树·机器学习
宁大小白24 分钟前
pythonstudy Day44
python·机器学习
码农BookSea29 分钟前
响应式编程不只有概念!万字长文 + 代码示例,手把手带你玩转 RxJava
后端
羸弱的穷酸书生39 分钟前
今天跟 AI学了一手
python
不要em0啦40 分钟前
从0开始学python:声明
python
毕设源码-郭学长42 分钟前
【开题答辩全过程】以 基于SpringBoot的足球运动员训练计划管理系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端