aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2004-12-16 13:42:21 +0000
committerDavid Heinemeier Hansson <david@loudthinking.com>2004-12-16 13:42:21 +0000
commit87297f1c4be22c10de138709ba2d6c3ace4b0117 (patch)
tree7f2ec2e8aea4a907834bae84e9cfb51c8588fb67 /activerecord
parent4d6bfc7a3615c68544ce10373e699eec1dfea669 (diff)
downloadrails-87297f1c4be22c10de138709ba2d6c3ace4b0117.tar.gz
rails-87297f1c4be22c10de138709ba2d6c3ace4b0117.tar.bz2
rails-87297f1c4be22c10de138709ba2d6c3ace4b0117.zip
Added assumption that a Symbol-based scope should end in _id unless it does so already and that you can pass vanilla string-based scopes as a parameter
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@183 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/lib/active_record/mixins/list.rb8
-rw-r--r--activerecord/test/fixtures/mixin.rb10
-rw-r--r--activerecord/test/mixin_test.rb11
3 files changed, 20 insertions, 9 deletions
diff --git a/activerecord/lib/active_record/mixins/list.rb b/activerecord/lib/active_record/mixins/list.rb
index a1d914d73c..f092347478 100644
--- a/activerecord/lib/active_record/mixins/list.rb
+++ b/activerecord/lib/active_record/mixins/list.rb
@@ -36,6 +36,8 @@ module ActiveRecord
def acts_as_list(options = {})
configuration = { :column => "position", :scope => "1" }
configuration.update(options) if options.is_a?(Hash)
+
+ configuration[:scope] = "#{configuration[:scope]}_id".intern if configuration[:scope].is_a?(Symbol) && configuration[:scope].to_s !~ /_id$/
class_eval <<-EOV
include InstanceMethods
@@ -45,11 +47,7 @@ module ActiveRecord
end
def scope_condition
- if configuration[:scope].is_a?(Symbol)
- "#{configuration[:scope]} = \#{#{configuration[:scope]}}"
- else
- configuration[:scope]
- end
+ "#{configuration[:scope].is_a?(Symbol) ? configuration[:scope].to_s + " = \#{" + configuration[:scope].to_s + "}" : configuration[:scope]}"
end
before_destroy :remove_from_list
diff --git a/activerecord/test/fixtures/mixin.rb b/activerecord/test/fixtures/mixin.rb
index 6da85e55e7..0c3bf5000a 100644
--- a/activerecord/test/fixtures/mixin.rb
+++ b/activerecord/test/fixtures/mixin.rb
@@ -9,5 +9,13 @@ class ListMixin < ActiveRecord::Base
def self.table_name
"mixins"
end
-
+end
+
+
+class ListWithStringScopeMixin < ActiveRecord::Base
+ acts_as_list :column => "pos", :scope => 'parent_id = #{parent_id}'
+
+ def self.table_name
+ "mixins"
+ end
end \ No newline at end of file
diff --git a/activerecord/test/mixin_test.rb b/activerecord/test/mixin_test.rb
index 107d6d2f0a..58e7ff1807 100644
--- a/activerecord/test/mixin_test.rb
+++ b/activerecord/test/mixin_test.rb
@@ -28,7 +28,7 @@ class ListTest < Test::Unit::TestCase
end
- def test_insert
+ def test_insert
new = ListMixin.create("parent_id"=>5)
assert_equal 1, new.pos
assert new.first?
@@ -48,8 +48,7 @@ class ListTest < Test::Unit::TestCase
assert_equal 1, new.pos
assert new.first?
assert new.last?
- end
-
+ end
def test_delete_middle
first = ListMixin.create("parent_id"=>5)
@@ -68,6 +67,12 @@ class ListTest < Test::Unit::TestCase
end
+ def test_with_string_based_scope
+ new = ListWithStringScopeMixin.create("parent_id"=>5)
+ assert_equal 1, new.pos
+ assert new.first?
+ assert new.last?
+ end
end
class TreeTest < Test::Unit::TestCase