나는 after_create 콜백을 가진 ActiveRecord :: Base로부터 상속받은 클래스를 가졌다. 콜백 내부에서, 아래 그림과 같이 내가 상수를 만듭니다메서드 종료 후 루비 상수가 삭제 되었습니까?
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
상수에는 어떤 변화가 있습니까? 더 이상 존재하지 않는 이유는 무엇입니까? 콘솔을 여러 번 리로드했지만 여전히이 상수는 존재하지 않습니다.
이 도움이 될 수 있습니다 : http://stackoverflow.com/questions/3409931/why-can-you-not-declare-constants-in-methods-with-ruby – Brennan
나는 Object.const_set 및 self.class .const_set, 내가 상수를 어디에 설정했는지에 관계없이, 단순히 메서드 호출 후에 존재하지 않습니다. – Donato