Имам клас, наследяващ от ActiveRecord :: Base, който има callback after_create. В рамките на обратната връзка създавам константа, както е показано по-долу:
class ClassificationCode < ActiveRecord::Base
after_create :associate_mongoid
def associate_mongoid
class_str = column_field.classify
klass = Object.const_set class_str, Class.new
puts "What is this #{klass} and its name #{klass.name}" # What is this SportsField and its name SportsField
c = klass.new
c["dynamic_field"] = "abc"
c.save
end
end
Елементът е запазен успешно в моя mongoid db, затова знам, че този метод напълно изпълнява. Тази константа обаче престава да съществува извън този метод. Пускам конзолата за релси:
> SportsField
NameError: uninitialized constant SportsField
> ClassificationCode::SportsField
NameError: uninitialized constant ClassificationCode::SportsField
Какво се случи с константата? Защо не съществува вече? Презаредих конзолата няколко пъти и все пак тази константа не съществува.
Отговори:
0 за отговор № 1Това изглежда е проблем с обхвата. Вие определяте константа във вашия метод и след това излизате от този метод. Константите са почти като всяка друга променлива, с изключение на това, че не можете да ги превъзложите.Ако я дефинирате по метод, тя не е определена извън този метод.Мисля, че злоупотребявате с постоянството тук.