[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
相关推荐
weixin_4440129313 小时前
CSS如何实现单选按钮自定义样式_利用伪元素隐藏默认UI
jvm·数据库·python
X566113 小时前
CSS如何利用Grid重写老旧的表格布局
jvm·数据库·python
uzong13 小时前
这套AI技术栈可将你的人工智能成本削减80%
人工智能·后端·架构
ㄟ留恋さ寂寞13 小时前
mysql如何配置MySQL的连接保持_调整tcp_keepalive设置
jvm·数据库·python
2301_7838486513 小时前
Less如何构建CSS样式库_通过继承机制优化组件化开发
jvm·数据库·python
candyTong21 小时前
Claude Code Agent Teams:多 Agent 协作的生命周期与实现机制
后端·架构
曦月逸霜21 小时前
啥是RAG 它能干什么?
人工智能·python·机器学习
2301_7693406721 小时前
如何在 Vuetify 中可靠捕获 Chip 关闭事件(包括键盘触发).txt
jvm·数据库·python
南 阳1 天前
Python从入门到精通day66
开发语言·python
m0_596749091 天前
JavaScript中手动实现一个new操作符的底层逻辑
jvm·数据库·python