The automatic detection of inverse relationships seems a little error-prone to me. It heavily depends upon the usage of symbols in :child_key Options. Example:
has n, :as, :child_key => 'b_id'
In this case the inverse would be generated (ignoring the existing one) because of :child_key being a String.
The Bug is located here:
["b_id"].send(:==, [:b_id]) # => false
This problem prevents the specification of DB constraints other then :protect (the default for automatically generated inverse relationships) when using Strings instead of Symbols in :child_key options.