Anyone have any idea what might be happening in this situation? Why is using self.class
or scope resolution ::MyModel
necessary?
class MyModel < ActiveRecord::Base
belongs_to :other_model
validate :custom_validation
private
def custom_validation
if MyModel.where(some_field: 1).count > 0
errors.add(:some_field, "foo")
end
end
end
# ... In some other part of the code base
my_model_instance = @other_model.my_models.find_or_initialize_by_some_field("foo")
my_model_instance.save
# Raises error - MyModel::MyModel is undefined
The above code works fine most of the time. But for some reason, in one situation it was throwing that exception. Changing the custom_validation
function to use self.class
instead of MyModel
and it works.
def custom_validation
if self.class.where(some_field: "bar").count > 0
errors.add(:some_field, "error message")
end
end
Has anyone seen anything like this before? Why/how can the constant MyModel
be interpreted as MyModel::MyModel
is this specific situation?
Ruby 2.0.0-p195
and Rails 3.2.13
edited: Clarify/add question about why scope resolution becomes necessary.
This question is pretty similar but it is still unclear to me why using MyModel
without scope resolution works fine most of the time.