diff options
author | David Heinemeier Hansson <david@loudthinking.com> | 2005-07-01 18:33:38 +0000 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2005-07-01 18:33:38 +0000 |
commit | ebd7bf7945d8fc6881a7b576fe22eaaa2ca3efd8 (patch) | |
tree | 9fe8236251a7160393dd035bc733717318440183 /activerecord | |
parent | f0e9fd74aed3d74e6ae8f53dbdcd1340d238cb57 (diff) | |
download | rails-ebd7bf7945d8fc6881a7b576fe22eaaa2ca3efd8.tar.gz rails-ebd7bf7945d8fc6881a7b576fe22eaaa2ca3efd8.tar.bz2 rails-ebd7bf7945d8fc6881a7b576fe22eaaa2ca3efd8.zip |
Added roots, root, and siblings to the batch of methods added by acts_as_tree #1541 [michael@schuerig.de]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1585 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/CHANGELOG | 2 | ||||
-rw-r--r-- | activerecord/lib/active_record/acts/tree.rb | 19 |
2 files changed, 20 insertions, 1 deletions
diff --git a/activerecord/CHANGELOG b/activerecord/CHANGELOG index 79968297b8..05c616e95f 100644 --- a/activerecord/CHANGELOG +++ b/activerecord/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Added roots, root, and siblings to the batch of methods added by acts_as_tree #1541 [michael@schuerig.de] + * Added support for limit/offset with the MS SQL Server driver so that pagination will now work #1569 [DeLynn Berry] * Added support for ODBC connections to MS SQL Server so you can connect from a non-Windows machine #1569 [Mark Imbriaco/DeLynn Berry] diff --git a/activerecord/lib/active_record/acts/tree.rb b/activerecord/lib/active_record/acts/tree.rb index 61163941d3..2463a1209a 100644 --- a/activerecord/lib/active_record/acts/tree.rb +++ b/activerecord/lib/active_record/acts/tree.rb @@ -35,9 +35,26 @@ module ActiveRecord def acts_as_tree(options = {}) configuration = { :foreign_key => "parent_id", :order => nil, :counter_cache => nil } configuration.update(options) if options.is_a?(Hash) - + belongs_to :parent, :class_name => name, :foreign_key => configuration[:foreign_key], :counter_cache => configuration[:counter_cache] has_many :children, :class_name => name, :foreign_key => configuration[:foreign_key], :order => configuration[:order], :dependent => true + + module_eval <<-END + def self.roots + self.find(:all, :conditions => "#{configuration[:foreign_key]} IS NULL", :order => "#{configuration[:order]}") + end + def self.root + self.find(:first, :conditions => "#{configuration[:foreign_key]} IS NULL", :order => "#{configuration[:order]}") + end + END + + define_method(:siblings) do + if parent + self.class.find(:all, :conditions => [ "#{configuration[:foreign_key]} = ?", parent.id ], :order => configuration[:order]) + else + self.class.roots + end + end end end end |