如何在ruby中进行排序

如何在ruby中进行排序,ruby,Ruby,在我的表中,我有first_name、middle_name和last_name字段。 我想按字母顺序显示名字、中间名、姓氏。 对于某些记录,first_name可能为空,对于某些记录,last_name可能为空,对于某些记录,middle_name可能为空。如果名字为空需要显示中间名和姓氏,如果中间名为空需要显示名字和姓氏,如果姓氏为空需要显示名字和姓氏。最后,我想按字母顺序显示列表。我想如何处理这个问题?在您的情况下可能的解决方案 您应该检测第一个非空属性: class YourModel

在我的表中,我有first_name、middle_name和last_name字段。 我想按字母顺序显示名字、中间名、姓氏。
对于某些记录,first_name可能为空,对于某些记录,last_name可能为空,对于某些记录,middle_name可能为空。如果名字为空需要显示中间名和姓氏,如果中间名为空需要显示名字和姓氏,如果姓氏为空需要显示名字和姓氏。最后,我想按字母顺序显示列表。我想如何处理这个问题?

在您的情况下可能的解决方案

您应该检测第一个非空属性:

class YourModel < ActiveRecord::Base
 def representation
   [first_name, middle_name, last_name].detect{ |r| r.present? }.downcase
 end
end
对对象进行排序:

空白?别名是否为空


你说的是纯Ruby还是RubyOnRails?你的表是由ActiveRecord类建模的?是的,我的表是由ActiveRecord类根据什么字母顺序建模的?最后一个可以简化为@objects.sort_by{| a | a.representation}。试试看!r、 空白?而不是r.present?如果您的Rails版本早于2.2.1,请使用方法blank?。
@objects = YourModel.all
@objects.sort! { |a,b| a.representation <=> b.representation }
# File activesupport/lib/active_support/core_ext/object/blank.rb, line 19
def present?
  !blank?
end
def empty?
  all? { |k, v| v && v.empty? && !v.is_a?(String) }
end