2012-05-30 43 views
-3

在我的表中我有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空白需要顯示首字母和中間名。最後我想按字母順序顯示列表。我想如何解決這個問題?Howe做的事在ruby中排序

+0

你是在談論普通的Ruby還是RubyOnRails(你的表是由ActiveRecord類建模的)? –

+0

是的,我的表是由ActiveRecord類建模的 – vinothini

+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 
+0

最後一個可以簡化爲'@objects.sort_by {| a | a.representation}'。 –

+0

我得到錯誤:未定義的方法'禮物?'爲「」:字符串 – vinothini

+0

試試'!r.blank?'而不是'r.present?',看看是否有效。 – iain