When you have a few models which you would like to connect to the polymorphic model via has_one association and this associations named differently you have no option to tell belongs_to in the polymorphic model association how would you like to inverse_of for each specific polymorphic association.
Use case: PhoneNumber model which associates via belongs_to polymorphic association with different objects. Some of them have has_one :phone_number, and some of them have for example non-standard has_one :mobile_phone. In case if you would like to list all the phone numbers and get the belongs_to association with possibility of inversion, it throws an exception InverseOfAssociationNotFoundError.
Solution is to support possibility to set inverse_of with using Hash and/or Proc.
With Hash you can list all the connected classes and their inverse associations, like (this is preferred solution):
belongs_to :user,
polymorphic: true,
inverse_of: {'User': :phone_number, 'Company': :mobile_number}
Or using via Proc (it’s more dynamic) where you can detect what class currently is associated with a polymorphic model:
belongs_to :user,
polymorphic: true,
inverse_of: -> klass { klass.is_a?(User) ? :phone_number : :mobile_number }
I’ve already tried to implement this functionality and it seems pretty easy to, just a few lines of code and a bit of tests.
Currently there are no solution to this issue at all, except to open a class and redefine a method.