This project is archived and is in readonly mode.
It's hard to understand errors generated by ActiveRecord::Base compute_type method
Reported by Ivan Konyshev | August 23rd, 2010 @ 12:35 AM
Strange exception occurs when try to build association in helper
f.object.send(association).build , where f.object type is Category and association is :rating_criterias
got error:
uninitialized constant Category::RatingCriteria
trace:
activerecord (3.0.0.rc) lib/active_record/base.rb:1139:in
compute_type'<br/> activerecord (3.0.0.rc)
lib/active_record/reflection.rb:169:in
send'
activerecord (3.0.0.rc) lib/active_record/reflection.rb:169:in
klass'<br/> activerecord (3.0.0.rc)
lib/active_record/reflection.rb:205:in
quoted_table_name'
activerecord (3.0.0.rc)
lib/active_record/associations/has_many_association.rb:102:in
construct_sql'<br/> activerecord (3.0.0.rc)
lib/active_record/associations/association_collection.rb:24:in
initialize'
activerecord (3.0.0.rc)
lib/active_record/associations/has_many_association.rb:11:in
initialize'<br/> activerecord (3.0.0.rc)
lib/active_record/associations.rb:1405:in
new'
activerecord (3.0.0.rc) lib/active_record/associations.rb:1405:in
rating_criterias'<br/>
app/helpers/application_helper.rb:7:in
link_to_add_fields'
After some investigation I found this:
activerecord-3.0.0.rc/lib/active_record/base.rb in compute_type
method:
name.scan(/::|$/) { candidates.unshift "#{$}::#{type_name}"
}
if name has no "::" then "name::type_name" is added to candidates instead of type_name itself
Comments and changes to this ticket
-
Ivan Konyshev August 23rd, 2010 @ 01:16 AM
After all it was mistake in my RatingCriteria definition.. Error message is completely misunderstandable.
ArgumentError was swallowed and uninitialized constant error generated with name of first candidate. -
Ivan Konyshev August 23rd, 2010 @ 01:18 AM
- Title changed from Error in ActiveRecord::Base compute_type method to It's hard to understand errors generated by ActiveRecord::Base compute_type method
-
Andrew White August 23rd, 2010 @ 12:35 PM
- State changed from new to invalid
- Importance changed from to Low
The error message is the same as you would get with pure ruby:
#!/usr/bin/ruby class Category def build RatingCriteria.new end end Category.new.build >> uninitialized constant Category::RatingCriteria (NameError)
The rescue for ArgumentError is there because constantize can raise one in certain circumstances but the correct class will eventually be found. The error message can't specifically refer to setting :class_name for an association as it's used elsewhere as well (e.g. STI).
Create your profile
Help contribute to this project by taking a few moments to create your personal profile. Create your profile »
<h2 style="font-size: 14px">Tickets have moved to Github</h2>
The new ticket tracker is available at <a href="https://github.com/rails/rails/issues">https://github.com/rails/rails/issues</a>