来自 table 的员工姓名中的起始字符列表
List of starting characters in employee names from table
我的 rails 应用的员工列表页面要求在员工姓名中的每个起始字符显示 link,以方便按字母快速搜索用户。
link 列表应该只包含那些名字以它们开头的字母。例如:如果 table 包含 3 个名称 - Joe User、Jill User 和 Example User - 只应显示两个 links E
和 J
。
想知道最有效的方法是什么。
作为第一次尝试,我在 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
.
生成的哈希键。
我的 rails 应用的员工列表页面要求在员工姓名中的每个起始字符显示 link,以方便按字母快速搜索用户。
link 列表应该只包含那些名字以它们开头的字母。例如:如果 table 包含 3 个名称 - Joe User、Jill User 和 Example User - 只应显示两个 links E
和 J
。
想知道最有效的方法是什么。
作为第一次尝试,我在 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
.