diff --git a/lib/ancestry/has_ancestry.rb b/lib/ancestry/has_ancestry.rb index 0c44db03..59712874 100644 --- a/lib/ancestry/has_ancestry.rb +++ b/lib/ancestry/has_ancestry.rb @@ -44,17 +44,19 @@ def has_ancestry options = {} scope :subtree_of, lambda { |object| where(to_node(object).subtree_conditions) } scope :siblings_of, lambda { |object| where(to_node(object).sibling_conditions) } scope :ordered_by_ancestry, lambda { - if %w(mysql mysql2 sqlite postgresql).include?(connection.adapter_name.downcase) + if %w(mysql mysql2 sqlite postgresql).include?(connection.adapter_name.downcase) && + defined?(ActiveRecord.version) && ActiveRecord.version.to_s >= "5" reorder("coalesce(#{connection.quote_table_name(table_name)}.#{connection.quote_column_name(ancestry_column)}, '')") else - reorder("(CASE WHEN #{connection.quote_table_name(table_name)}.#{connection.quote_column_name(ancestry_column)} IS NULL THEN 0 ELSE 1 END), #{connection.quote_table_name(table_name)}.#{connection.quote_column_name(ancestry_column)}, #{order}") + reorder("(CASE WHEN #{connection.quote_table_name(table_name)}.#{connection.quote_column_name(ancestry_column)} IS NULL THEN 0 ELSE 1 END), #{connection.quote_table_name(table_name)}.#{connection.quote_column_name(ancestry_column)}") end } scope :ordered_by_ancestry_and, lambda { |order| - if %w(mysql mysql2 sqlite postgresql).include?(connection.adapter_name.downcase) + if %w(mysql mysql2 sqlite postgresql).include?(connection.adapter_name.downcase) && + defined?(ActiveRecord.version) && ActiveRecord.version.to_s >= "5" reorder("coalesce(#{connection.quote_table_name(table_name)}.#{connection.quote_column_name(ancestry_column)}, ''), #{order}") else - reorder("(CASE WHEN #{connection.quote_table_name(table_name)}.#{connection.quote_column_name(ancestry_column)} IS NULL THEN 0 ELSE 1 END), #{connection.quote_table_name(table_name)}.#{connection.quote_column_name(ancestry_column)}") + reorder("(CASE WHEN #{connection.quote_table_name(table_name)}.#{connection.quote_column_name(ancestry_column)} IS NULL THEN 0 ELSE 1 END), #{connection.quote_table_name(table_name)}.#{connection.quote_column_name(ancestry_column)}, #{order}") end } scope :path_of, lambda { |object| to_node(object).path } diff --git a/test/concerns/default_scopes_test.rb b/test/concerns/default_scopes_test.rb index e23db0ad..f40743bb 100644 --- a/test/concerns/default_scopes_test.rb +++ b/test/concerns/default_scopes_test.rb @@ -17,6 +17,8 @@ def test_node_excluded_by_default_scope_should_still_move_with_parent child.update_attributes :deleted_at => nil assert child.reload.ancestors.include? new_grandparent + assert_equal new_grandparent, child.reload.ancestors.first + assert_equal parent, child.reload.ancestors.last end end @@ -53,4 +55,4 @@ def test_node_excluded_by_default_scope_should_be_rootified assert child.reload.is_root? end end -end \ No newline at end of file +end