Fix get_sorted_and_filtered, accepts 3 arguments and works for category

This commit is contained in:
chris 2013-07-16 14:43:56 +08:00
parent 62288a71ca
commit 5190c1160a
1 changed files with 18 additions and 6 deletions

View File

@ -229,7 +229,7 @@ class ApplicationController < ActionController::Base
redirect_to ret redirect_to ret
end end
def get_sorted_and_filtered(object_class, query=nil) def get_sorted_and_filtered(object_class, query = nil, objects = nil)
if params[:filter] || params[:sort] || params[:new_filter] if params[:filter] || params[:sort] || params[:new_filter]
@filter = params[:filter] @filter = params[:filter]
new_filter = params[:new_filter] new_filter = params[:new_filter]
@ -248,11 +248,11 @@ class ApplicationController < ActionController::Base
@filter = {new_filter[:type] => [new_filter[:id].to_s]} @filter = {new_filter[:type] => [new_filter[:id].to_s]}
end end
objects = get_objects(object_class, query)
object_class = object_class.classify.constantize object_class = object_class.classify.constantize
if !params[:sort].blank? objects ||= get_objects(object_class, query)
unless params[:sort].blank?
options = params[:sort_options] options = params[:sort_options]
options = [options] if !options.class.eql?(Array) options = [options] unless options.is_a?(Array)
options.each do |option| options.each do |option|
if object_class.fields.include?(option) if object_class.fields.include?(option)
if object_class.fields[option].type.to_s.eql?('Object') && !object_class.relations[option].nil? if object_class.fields[option].type.to_s.eql?('Object') && !object_class.relations[option].nil?
@ -272,6 +272,19 @@ class ApplicationController < ActionController::Base
when :referenced_in when :referenced_in
objects = get_objects_from_referenced_objects(object_class.relations[option].class_name.constantize, objects, "#{option}_id") objects = get_objects_from_referenced_objects(object_class.relations[option].class_name.constantize, objects, "#{option}_id")
end end
elsif option.eql?('category')
category_array = @module_app.categories.inject([]){ |result, value|
result << [value.title, value]
}
params[:direction].eql?('asc') ? category_array.sort! : category_array.sort!.reverse!
sorted_objects = Array.new
category_array.each do |x|
buffer_categories = x[1].buffer_categories
buffer_categories.each {|buffer_category| sorted_objects << buffer_category.categorizable }
end
sorted_objects.flatten!
sorted_objects.uniq!
objects = get_with_nil(objects, option, sorted_objects)
elsif option.eql?('tags') elsif option.eql?('tags')
tag_array = @module_app.tags.inject([]){ |result, value| tag_array = @module_app.tags.inject([]){ |result, value|
result << [value.name, value] result << [value.name, value]
@ -285,7 +298,7 @@ class ApplicationController < ActionController::Base
sorted_objects.flatten! sorted_objects.flatten!
sorted_objects.uniq! sorted_objects.uniq!
objects = get_with_nil(objects, option, sorted_objects) objects = get_with_nil(objects, option, sorted_objects)
end end
end end
end end
if @filter if @filter
@ -381,7 +394,6 @@ class ApplicationController < ActionController::Base
end end
def get_objects(object_class, query=nil) def get_objects(object_class, query=nil)
object_class = object_class.classify.constantize
if query if query
objects = object_class.where(query) objects = object_class.where(query)
else else