如何在红宝石中排序

时间:2012-05-30 09:59:05

标签: ruby

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

1 个答案:

答案 0 :(得分:0)

在你的情况下可能的解决方案。

您应首先检测 non blank 属性:

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

抓取对象:

@objects = YourModel.all

排序对象:

@objects.sort! { |a,b| a.representation <=> b.representation }

方法 present? 可从 Rails 2.2.1 版本开始提供。

http://apidock.com/rails/v2.2.1/Object/present%3F

根据评论中的讨论: present? !blank? 相同。

# File activesupport/lib/active_support/core_ext/object/blank.rb, line 19
def present?
  !blank?
end

blank? empty? 的别名。

def empty?
  all? { |k, v| v && v.empty? && !v.is_a?(String) }
end