我的 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
在每次渲染 View 时都会调用它;所以将其更改为使用类变量,如下所示:
@@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
现在每个 session 只调用一次。有没有更好的方法来完成这个?
我正在考虑的另一个选择是将起始字符列表存储在一个单独的表中,并在修改员工数据时更新它,但担心这可能太麻烦,以保持单独的表与主表。
最佳答案
以下应该适合您:
first_letters = self.pluck(:name).group_by{ |name| name[0].upcase }.keys
它获取所有用户名,按名称的第一个字母对它们进行分组,并仅获取 group_by
生成的哈希键。
关于mysql - 表中员工姓名中的起始字符列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27826681/