Class: ActsAsOrderedTree::Relation::Recursive
- Defined in:
- lib/acts_as_ordered_tree/relation/recursive.rb
Overview
Recursive relation fixes Rails3.0 issue github.com/rails/rails/issues/522 for relations with joins to subqueries
Constant Summary
Constants inherited from Base
Instance Attribute Summary collapse
-
#recursive_query_value ⇒ Object
Returns the value of attribute recursive_query_value.
-
#recursive_table_value ⇒ Object
Returns the value of attribute recursive_table_value.
Instance Method Summary collapse
- #build_arel ⇒ Object
- #except(*skips) ⇒ Object
- #update_all(updates, conditions = nil, options = {}) ⇒ Object
-
#with_recursive(recursive_table_name, query) ⇒ Object
relation.with_recursive(“table_name”, “SELECT * FROM table_name”).
Methods inherited from Base
Constructor Details
This class inherits a constructor from ActsAsOrderedTree::Relation::Base
Instance Attribute Details
#recursive_query_value ⇒ Object
Returns the value of attribute recursive_query_value.
8 9 10 |
# File 'lib/acts_as_ordered_tree/relation/recursive.rb', line 8 def recursive_query_value @recursive_query_value end |
#recursive_table_value ⇒ Object
Returns the value of attribute recursive_table_value.
8 9 10 |
# File 'lib/acts_as_ordered_tree/relation/recursive.rb', line 8 def recursive_table_value @recursive_table_value end |
Instance Method Details
#build_arel ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/acts_as_ordered_tree/relation/recursive.rb', line 18 def build_arel if recursive_table_value && recursive_query_value join_sql = "INNER JOIN (" + recursive_query_sql + ") AS #{recursive_table_value} ON #{recursive_table_value}.id = #{table.name}.id" except(:recursive_table, :recursive_query).joins(join_sql).build_arel else super end end |
#except(*skips) ⇒ Object
41 42 43 44 45 46 47 48 |
# File 'lib/acts_as_ordered_tree/relation/recursive.rb', line 41 def except(*skips) result = super ([:recursive_table, :recursive_query] - skips).each do |method| result.send("#{method}_value=", send(:"#{method}_value")) end result end |
#update_all(updates, conditions = nil, options = {}) ⇒ Object
30 31 32 33 34 35 36 37 38 39 |
# File 'lib/acts_as_ordered_tree/relation/recursive.rb', line 30 def update_all(updates, conditions = nil, = {}) if recursive_table_value && recursive_query_value scope = where("id IN (SELECT id FROM (#{recursive_query_sql}) AS #{recursive_table_value})"). except(:recursive_table, :recursive_query, :limit, :order) scope.update_all(updates, conditions, ) else super end end |
#with_recursive(recursive_table_name, query) ⇒ Object
relation.with_recursive(“table_name”, “SELECT * FROM table_name”)
11 12 13 14 15 16 |
# File 'lib/acts_as_ordered_tree/relation/recursive.rb', line 11 def with_recursive(recursive_table_name, query) relation = clone relation.recursive_table_value = recursive_table_name relation.recursive_query_value = query relation end |