2012-05-30 2 views
-3

В моей таблице у меня есть поля first_name, middle_name и last_name. Я хочу показать как First_name Middle_name Last_name в алфавитном порядке. Для некоторых записей имя first_name может быть пустым, для некоторых записей last_name может быть пустым, для некоторых записей среднее имя может быть пустым. Если first_name blank должно показывать среднее имя и last_name, если для среднего_имя должно быть имя и фамилия, если last_name blank должно показывать первое и второе имя. В финале я хочу показать список в алфавитном порядке. Как я хочу подходить к этой проблеме?Howe do Sort in 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 

Fetch объекты:

@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

У меня ошибка: undefined method 'present? ' for "": String – vinothini

+0

Попробуйте '! r.blank?' вместо 'r.present? 'и посмотрите, работает ли это. – iain