mysql - 表中员工姓名中的起始字符列表

标签 mysql ruby-on-rails

我的 Rails 应用程序的员工列表页面要求显示员工姓名中每个起始字符的链接,以便于通过字母快速搜索用户。

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

想知道执行此操作的最有效方法是什么。

作为第一次尝试,我在 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/

相关文章:

ruby-on-rails - 带有 I18n 的邮件程序的 Rspec

php - while->fetch 循环中的迭代不起作用

php - 无法插入指向数据库的链接

MySQL(存储过程)游标循环无需 CONTINUE HANDLER 即可工作

javascript - HTML选择更改,必须更改PHP Echo变量

ruby-on-rails - 为帖子设置published_at的虚拟属性

mysql - 准备语句: Can I supply the column name as parameter?

ruby-on-rails - Rails 3 使用范围进行多参数过滤

ruby-on-rails - 设计 jQuery Mobile 和 Rails 的登录问题

ruby-on-rails - 自动初始化 Rails 控制台