diff options
author | Jon Leighton <j@jonathanleighton.com> | 2011-11-04 11:16:55 +0000 |
---|---|---|
committer | Jon Leighton <j@jonathanleighton.com> | 2011-11-04 11:17:56 +0000 |
commit | e6cc2ea201857a5f3700f589336df2880564cfea (patch) | |
tree | e05f67885b8201f74b9284f6dc1497fd2c4d56ec /activerecord | |
parent | 2c67845271f7bd800fa4f902e187c803ab61bb01 (diff) | |
download | rails-e6cc2ea201857a5f3700f589336df2880564cfea.tar.gz rails-e6cc2ea201857a5f3700f589336df2880564cfea.tar.bz2 rails-e6cc2ea201857a5f3700f589336df2880564cfea.zip |
Allow the :class_name option for associations to take a symbol.
This is to avoid confusing newbies, and to be consistent with the fact
that other options like :foreign_key already allow a symbol or a string.
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/CHANGELOG | 8 | ||||
-rw-r--r-- | activerecord/lib/active_record/reflection.rb | 2 | ||||
-rw-r--r-- | activerecord/test/cases/reflection_test.rb | 6 | ||||
-rw-r--r-- | activerecord/test/models/company.rb | 1 |
4 files changed, 15 insertions, 2 deletions
diff --git a/activerecord/CHANGELOG b/activerecord/CHANGELOG index 871cc624ca..5417824805 100644 --- a/activerecord/CHANGELOG +++ b/activerecord/CHANGELOG @@ -1,5 +1,13 @@ *Rails 3.2.0 (unreleased)* +* Allow the :class_name option for associations to take a symbol (:Client) in addition to + a string ('Client'). + + This is to avoid confusing newbies, and to be consistent with the fact that other options + like :foreign_key already allow a symbol or a string. + + [Jon Leighton] + * In development mode the db:drop task also drops the test database. For symmetry with the db:create task. [Dmitriy Kiriyenko] diff --git a/activerecord/lib/active_record/reflection.rb b/activerecord/lib/active_record/reflection.rb index 98f0418d3f..52968070cb 100644 --- a/activerecord/lib/active_record/reflection.rb +++ b/activerecord/lib/active_record/reflection.rb @@ -124,7 +124,7 @@ module ActiveRecord # <tt>composed_of :balance, :class_name => 'Money'</tt> returns <tt>'Money'</tt> # <tt>has_many :clients</tt> returns <tt>'Client'</tt> def class_name - @class_name ||= options[:class_name] || derive_class_name + @class_name ||= (options[:class_name] || derive_class_name).to_s end # Returns +true+ if +self+ and +other_aggregation+ have the same +name+ attribute, +active_record+ attribute, diff --git a/activerecord/test/cases/reflection_test.rb b/activerecord/test/cases/reflection_test.rb index 4d21822cf5..3868ecb3cb 100644 --- a/activerecord/test/cases/reflection_test.rb +++ b/activerecord/test/cases/reflection_test.rb @@ -189,7 +189,7 @@ class ReflectionTest < ActiveRecord::TestCase def test_reflection_of_all_associations # FIXME these assertions bust a lot - assert_equal 36, Firm.reflect_on_all_associations.size + assert_equal 37, Firm.reflect_on_all_associations.size assert_equal 26, Firm.reflect_on_all_associations(:has_many).size assert_equal 10, Firm.reflect_on_all_associations(:has_one).size assert_equal 0, Firm.reflect_on_all_associations(:belongs_to).size @@ -325,6 +325,10 @@ class ReflectionTest < ActiveRecord::TestCase assert_equal orig_conds, Post.reflect_on_association(:first_blue_tags_2).conditions.inspect end + def test_symbol_for_class_name + assert_equal Client, Firm.reflect_on_association(:unsorted_clients_with_symbol).klass + end + private def assert_reflection(klass, association, options) assert reflection = klass.reflect_on_association(association) diff --git a/activerecord/test/models/company.rb b/activerecord/test/models/company.rb index c1f7a4171a..78eb4c57ac 100644 --- a/activerecord/test/models/company.rb +++ b/activerecord/test/models/company.rb @@ -42,6 +42,7 @@ class Firm < Company :before_remove => :log_before_remove, :after_remove => :log_after_remove has_many :unsorted_clients, :class_name => "Client" + has_many :unsorted_clients_with_symbol, :class_name => :Client has_many :clients_sorted_desc, :class_name => "Client", :order => "id DESC" has_many :clients_of_firm, :foreign_key => "client_of", :class_name => "Client", :order => "id" has_many :unvalidated_clients_of_firm, :foreign_key => "client_of", :class_name => "Client", :validate => false |