来自 table 的员工姓名中的起始字符列表

List of starting characters in employee names from table

我的 rails 应用的员工列表页面要求在员工姓名中的每个起始字符显示 link,以方便按字母快速搜索用户。

link 列表应该只包含那些名字以它们开头的字母。例如:如果 table 包含 3 个名称 - Joe User、Jill User 和 Example User - 只应显示两个 links EJ

想知道最有效的方法是什么。

作为第一次尝试,我在 Employee class 中添加了一个 class 方法,如下所示:

def self.list_of_starting_characters
  array = []
  ('A'..'Z').to_a.each do |char|
    array << char unless self.where("name like '#{char}%'").count.zero?
  end 

  array
end

每次渲染视图时都会调用它;所以将其更改为使用 class 变量,如下所示:

@@starting_characters_list = []

def self.list_of_starting_characters
  return @@starting_characters_list unless @@starting_characters_list.empty?

  array = []
  ('A'..'Z').to_a.each do |char|
    array << char unless self.where("name like '#{char}%'").count.zero?
  end 

  @@starting_characters_list = array
end

现在每个会话只调用一次。有没有更好的方法来完成这个?

我正在考虑的另一个选择是将起始字符列表存储在单独的 table 中,并在修改员工数据时更新它,但担心这可能太麻烦,无法保留单独的 table 与主 table.

同步

以下应该适合您:

first_letters = self.pluck(:name).group_by{ |name| name[0].upcase }.keys

它抓取所有用户的名字,按名字的第一个字母对它们进行分组,并只获得 group_by.

生成的哈希键。