この状況で何が起こっているのか、誰にも分かりますか? なぜ使用self.class
またはスコープの解決::MyModel
が必要なのですか?
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
上記のコードは、ほとんどの場合問題なく動作します。しかし、何らかの理由で、ある状況でその例外がスローされていました。代わりにcustom_validation
使用する機能を変更すると機能します。self.class
MyModel
def custom_validation
if self.class.where(some_field: "bar").count > 0
errors.add(:some_field, "error message")
end
end
誰もこのようなものを見たことがありますか?この特定の状況として、なぜ/どのように定数MyModel
を解釈できますか?MyModel::MyModel
Ruby 2.0.0-p195
とRails 3.2.13
編集: スコープの解決が必要になる理由についての質問を明確化/追加します。
この質問はかなり似ていますが、スコープ解決なしで使用してもほとんどの場合うまくいく理由はまだ不明です。MyModel