#Issues # THIS WORKS: search = Company.search(:users_orders_line_items_price_gte => "2", :order => :ascend_by_orders_total ) #since there is an association in the ordering, the scope returned from the first conditions runs through the stack and hits the join class creating the #necessary join. When this happens it creates a new set of joins values for the scope # so I can call joins_values on scope, choose the last one and order based on that.(...order("orders.total ASC")) #This don't: search = Company.search(:users_orders_line_items_price_gte => "2", :order => :ascend_by_identifier ) #Since there is no association in the ordering method, it never runs through the 'joins' class. So when I call joins_values #on the current scope i get backk {:users => {:orders => :line_items}} since the last value is line_item, i obviously don't #want to order on that. #Fix: #my fix checks to see if the value following ascend_by_ is a column of the current klass, if so it orders using the #current klass (...order("companies.indentifier ASC")) otherwise it assumes that you want to be ordering on the last #value in the joins_value hash def scope if applicable? ##add specific column to order on in all ordering queries klass.joins(join).order("#{order_on.to_s.pluralize}.#{sort_on} DESC") end end def order_on joins_values = Array(klass.scoped.joins_values.flatten.try(:last)).flatten potential_column = /descend_by_/.match(method_name).post_match if klass.column_names.include?(potential_column) klass.name.underscore.pluralize else Array(joins_values.last).flatten.last end end