rails中的显示名称应包含名字和姓氏的首字母

时间:2016-12-16 05:18:15

标签: ruby-on-rails ruby ruby-on-rails-4

我有一个学生收集结果集,我需要关注。 应按照以下规则解析显示名称:如果集合中没有其他学生具有相同的名字,则显示它们 名字应该只是他们的名字。

  1. 如果集合中有多个学生使用相同的名字,他们的显示名称应该是他们的名字后跟一个空格和他们的最后一个名字(例如“John Smith”会解析为“John S”).. < / LI>

3 个答案:

答案 0 :(得分:0)

试试这个

@results.each do |object|
  displayname = (@results.select { |filter_object| filter_object.first_name == object.first_name }.count > 0) ? object.first_name : object.first_name + " " + object.last_name.initial
end

答案 1 :(得分:0)

这里有一个例子,这可能不是你需要的(这听起来像家庭作业),但希望它能给你一个想法。

# in Student model
attr_accessor :display_name

# in controller
students = Student.all
students.each do |student|
  if students.count { |s| s.first_name == student.first_name } > 1
    student.display_name =  s.first_name
  else
    student.display_name = "#{student.first_name} #{student.last_name[0].upcase}"
  end
end

# in view
<% students.each do |student| %>
  <%= student.display_name %>
<% end %>

答案 2 :(得分:0)

首先找出重复的名字。

dup_first_names = Student.select(:first_name).group(:first_name).group(:first_name).having("COUNT(*) > 1").uniq.pluck(:first_name)

然后为每个学生检查名字是否在dup_first_names数组中。

Student.all.each do |s|
  if dup_first_names.include?(s.first_name)
    puts "#{s.first_name} #{s.last_name.first}" 
  else
    puts "#{s.first_name}" 
  end
end