Inflections


#1

I’m having difficulty getting inflections to work properly.
I have put this into environment inflection.rb :

ActiveSupport::Inflector.inflections do |inflect|
inflect.plural ‘criterion’, ‘criteria’
inflect.singular ‘criteria’, ‘criterion’
end

I have a habtm relationship between component_types and criteria with
tables called
component_types, criteria and the join table component_types_criteria

But when I do this…

c = Criterion.new
=> #<Criterion id: nil, question: nil, notes: nil, result_type_id:
nil, created_at: nil, updated_at: nil>

c.save
=> true

d = ComponentType.new
=> #<ComponentType id: nil, name: nil, manufacturer: nil, description:
nil, created_at: nil, updated_at: nil>

d.save
=> true

d.criteria << c
NameError: uninitialized constant ComponentType::Criterium
from /Library/Ruby/Gems/1.8/gems/activesupport-2.1.1/lib/
active_support/dependencies.rb:493:in const_missing' from /Library/Ruby/Gems/1.8/gems/activerecord-2.1.1/lib/active_record/ base.rb:1914:incompute_type’
from /Library/Ruby/Gems/1.8/gems/activerecord-2.1.1/lib/active_record/
reflection.rb:129:in send' from /Library/Ruby/Gems/1.8/gems/activerecord-2.1.1/lib/active_record/ reflection.rb:129:inklass’
from /Library/Ruby/Gems/1.8/gems/activerecord-2.1.1/lib/active_record/
reflection.rb:137:in quoted_table_name' from /Library/Ruby/Gems/1.8/gems/activerecord-2.1.1/lib/active_record/ associations/has_and_belongs_to_many_association.rb:80:inconstruct_sql’
from /Library/Ruby/Gems/1.8/gems/activerecord-2.1.1/lib/active_record/
associations/association_collection.rb:8:in initialize' from /Library/Ruby/Gems/1.8/gems/activerecord-2.1.1/lib/active_record/ associations.rb:1135:innew’
from /Library/Ruby/Gems/1.8/gems/activerecord-2.1.1/lib/active_record/
associations.rb:1135:in `criteria’
from (irb):8

I get a NameError, apparently ActiveRecord is looking for the singular
of criteria which it thinks is criterium. Active Record is bad at
latin, methinks.

Any clues? Or do I just have to refactor and rename the Criterion
model to Criterium?


#2

And I solved it myself…
I have to put the capitalized versions of the words in the
inflections, or rather make them a case insensitive regex!

Apologies for the noise.