diff --git a/lib/closure_tree/numeric_order_support.rb b/lib/closure_tree/numeric_order_support.rb index faeec05..0e53358 100644 --- a/lib/closure_tree/numeric_order_support.rb +++ b/lib/closure_tree/numeric_order_support.rb @@ -42,7 +42,7 @@ def reorder_with_parent_id(parent_id, minimum_sort_order_value = nil) UPDATE #{quoted_table_name} SET #{quoted_order_column(false)} = t.seq + #{minimum_sort_order_value.to_i - 1} FROM ( - SELECT #{quoted_id_column_name} AS id, row_number() OVER(ORDER BY #{order_by}) AS seq + SELECT #{quoted_id_column_name} AS id, row_number() OVER(ORDER BY #{fully_qualified_order_by}) AS seq FROM #{quoted_table_name} WHERE #{where_eq(parent_column_name, parent_id)} #{min_where} ) AS t diff --git a/lib/closure_tree/support.rb b/lib/closure_tree/support.rb index 3101388..9d498da 100644 --- a/lib/closure_tree/support.rb +++ b/lib/closure_tree/support.rb @@ -66,14 +66,14 @@ def hierarchy_table_name def with_order_option(opts) if order_option? - opts[:order] = [opts[:order], order_by].compact.join(",") + opts[:order] = [opts[:order], fully_qualified_order_by].compact.join(",") end opts end def scope_with_order(scope, additional_order_by = nil) if order_option? - scope.order(*([additional_order_by, order_by].compact)) + scope.order(*([additional_order_by, fully_qualified_order_by].compact)) else additional_order_by ? scope.order(additional_order_by) : scope end @@ -85,7 +85,7 @@ def has_many_order_without_option(order_by_opt) end def has_many_order_with_option(order_by_opt=nil) - order_options = [order_by_opt, order_by].compact + order_options = [order_by_opt, fully_qualified_order_by].compact [lambda { order_options = order_options.map { |o| o.is_a?(Proc) ? o.call : o } order(order_options) diff --git a/lib/closure_tree/support_attributes.rb b/lib/closure_tree/support_attributes.rb index 38879ad..8c6ddc8 100644 --- a/lib/closure_tree/support_attributes.rb +++ b/lib/closure_tree/support_attributes.rb @@ -115,6 +115,10 @@ def quoted_order_column(include_table_name = true) "#{prefix}#{connection.quote_column_name(order_column)}" end + def fully_qualified_order_by + "#{quoted_order_column} #{order_by_order}" + end + # table_name alias keyword , like "AS". When used on table name alias, Oracle Database don't support used 'AS' def t_alias_keyword (ActiveRecord::Base.connection.adapter_name.to_sym == :OracleEnhanced) ? "" : "AS"