Reputation: 17512
Let's say I run an ActiveRecord query and it returns 3 results, with a bunch of attributes.
I want to add 3 attributes to each record in the Array so I can do sorting at a code-level. These 3 include: num_comments, num_views, last_view.
Upvotes: 1
Views: 674
Reputation: 9014
Expanding on Larry K's answer and zed_0xff's comment, why even create attributes, just sort by a method in your model:
class Widget < ActiveRecord::Base
def num_comments
#count comments
end
def num_views
#count views
end
def last_view
#return last view
end
end
in your controller
class WidgetsController < ApplicationController
def index
@widgets = Widget.all.sort_by{ |r| [r.num_comments, r.num_views, r.last_view] }
end
end
Upvotes: 1
Reputation: 49114
# 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
Upvotes: 3