Добавление дополнительных атрибутов сортировки в массив записей ... затем сортировка! - PullRequest
1 голос
/ 17 июня 2010

Допустим, я выполняю запрос ActiveRecord, и он возвращает 3 результата с кучей атрибутов.

Я хочу добавить 3 атрибута к каждой записи в массиве, чтобы можно было выполнить сортировку на уровне кода,Эти 3 включают в себя: num_comments, num_views, last_view.

  1. Как добавить эти атрибуты?
  2. Как мне затем отсортировать записи в порядке приоритета по num_comments AND по num_viewsИ по last_view?

Ответы [ 2 ]

3 голосов
/ 17 июня 2010
# file a_model_class (AR subclass)
   attr_accessor :num_comments, :num_views, :last_view # add setters and getters

# different file that is doing the fetch and sort...
results = AModelClass.find.... # 3 results
results.each{|r|
  r.num_comments = x  # set the instance variables for sorting
  r.num_views = y
  r.last_view = z
}

# now sort
sorted_results = results.sort{|a,b|
  r = a.num_comments <=> b.num_comments 
  r = a.num_views <=> b.num_views if r == 0
  r = a.last_view <=> b.last_view if r == 0
}

# sorted_results is sorted copy of results
1 голос
/ 17 июня 2010

Расширяя ответ Ларри К и комментарий zed_0xff, зачем даже создавать атрибуты, просто отсортируйте по методу в вашей модели:

class Widget < ActiveRecord::Base
  def num_comments
    #count comments
  end

  def num_views
    #count views
  end

  def last_view
    #return last view
  end
end

в вашем контроллере

class WidgetsController < ApplicationController
  def index
    @widgets = Widget.all.sort_by{ |r| [r.num_comments, r.num_views, r.last_view] }
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...