Exception: Mongoid::Errors::UnrecognizedModelAlias
- Inherits:
-
MongoidError
- Object
- StandardError
- MongoidError
- Mongoid::Errors::UnrecognizedModelAlias
- Defined in:
- lib/mongoid/errors/unrecognized_model_alias.rb
Overview
Raised when a polymorphic association is queried, but the type of the association cannot be resolved. This usually happens when the data in the database references a type that no longer exists.
For example, consider the following model:
class Manager
include Mongoid::Document
belongs_to :unit, polymorphic: true
end
Imagine there is a document in the ‘managers` collection that looks something like this:
{ _id: ..., unit_id: ..., unit_type: 'Department::Engineering' }
If, at some point in your refactoring, you rename the ‘Department::Engineering` model to something else, Mongoid will no longer be able to resolve the type of this association, and asking for `manager.unit` will raise this exception.
To fix this exception, you can add an alias to the model class so that it can still be found, even after renaming it:
module Engineering
class Department
include Mongoid::Document
identify_as 'Department::Engineering'
# ...
end
end
Better practice would be to use unique strings instead of class names to identify these polymorphic types in the database (e.g. ‘dept’ instead of ‘Department::Engineering’).
Constant Summary
Constants inherited from MongoidError
Instance Attribute Summary
Attributes inherited from MongoidError
#problem, #resolution, #summary
Instance Method Summary collapse
-
#initialize(model_alias) ⇒ UnrecognizedModelAlias
constructor
A new instance of UnrecognizedModelAlias.
Methods inherited from MongoidError
Constructor Details
#initialize(model_alias) ⇒ UnrecognizedModelAlias
Returns a new instance of UnrecognizedModelAlias.
43 44 45 46 47 48 49 50 |
# File 'lib/mongoid/errors/unrecognized_model_alias.rb', line 43 def initialize(model_alias) super( ( 'unrecognized_model_alias', model_alias: model_alias.inspect ) ) end |