我的rails应用程序上的员工列表页面要求显示员工姓名中每个起始字符的链接,以便通过信函快速搜索用户。
链接列表应仅包含名称以其开头的字母。例如:如果表包含3个名称 - Joe User,Jill User和Example User - 则只应显示两个链接E
和J
。
想知道最有效的方法是什么。
作为第一次尝试,我在Employee
类中添加了一个类方法,如下所示:
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
每次渲染视图时都会调用它;所以改为使用类变量,如下所示:
@@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
现在每个会话只调用一次。有没有更好的方法来实现这一目标?
我正在考虑的另一个选项是将起始字符列表存储在一个单独的表中,并在修改员工数据时更新它,但担心这可能太麻烦,以保持单独的表与之同步主表。
答案 0 :(得分:2)
以下内容对您有用:
first_letters = self.pluck(:name).group_by{ |name| name[0].upcase }.keys
它抓取所有用户的名称,按名称的第一个字母对它们进行分组,并获得group_by
生成的哈希的唯一键。