You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于数组常量创建Rails作用域实现字符串搜索?

解决方案

首先得明确:你的Skills类不是Active Record模型,AR自带的scope机制在这里用不上——AR的scope是基于数据库查询的,而你要操作的是内存里的静态数组,完全是两回事。不过我们可以写一个类方法,模拟你习惯的scope调用方式,实现数组搜索。

1. 精确匹配场景

如果需要严格匹配技能名称,直接用select筛选数组:

class Skills
  SALES_SKILLS = %w(
    Accounting
    Mentoring
    Negotiating
    Closing
  )
  
  def self.sales_skills(skill)
    SALES_SKILLS.select { |s| s == skill }
  end
end

调用方式和AR scope一致:Skills.sales_skills("Mentoring")会返回["Mentoring"]。

2. 模糊匹配场景

如果要支持关键词模糊搜索(比如输入"ment"能匹配到"Mentoring"),可以加上大小写不敏感的处理:

class Skills
  SALES_SKILLS = %w(
    Accounting
    Mentoring
    Negotiating
    Closing
  )
  
  def self.sales_skills(skill)
    return SALES_SKILLS if skill.blank? # 空关键词返回全部
    
    SALES_SKILLS.select do |s|
      s.downcase.include?(skill.strip.downcase)
    end
  end
end

这样调用Skills.sales_skills("ment")会返回["Mentoring"],输入空值则返回所有销售技能。

额外说明

因为数组本身就是Enumerable对象,所以你可以像AR链式调用一样继续追加操作,比如:

Skills.sales_skills("ing").sort.reverse

会返回匹配关键词且倒序排序的结果。

内容的提问来源于stack exchange,提问作者Carl Edwards

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 23:09:22