동적으로 모델을 만들려면 다음 레일 3 모델을 사용하고 있습니다 :동적으로 생성 된 Rails 모델을 저장할 안전한 곳이 있습니까?
# encoding: UTF-8
require_dependency 'read_only'
require_dependency 'readings_methods'
class Reading < ActiveRecord::Base
self.abstract_class = true
include ReadOnly
include ReadingsMethods
@@mutex = Mutex.new
@@children = {}
def self.with_table(t)
@@mutex.synchronize do
child = @@children[t]
if child.nil?
child = Class.new(self) do
self.table_name = t
end
@@children[t] = child
end
child
end
end
end
디버깅 프로그램을하지만, @@children
모든 페이지로드에 리셋되어, 따라서 아주, 아주 천천히 모든 페이지에 올려 놓습니다. 어떻게 이것을 막을 수 있습니까? 그리고 그 원인은 무엇입니까? 내가 어린이를 암기하지 않으면 Rails는 무한 루프에 빠지게된다. 레일스는 새로운 모델을 만들 때마다 최소한 몇 가지 클래스를 새로 고친다고 믿는다. 이 동작을 어떻게 막을 수 있습니까?
왜 다시로드합니까? 각 페이지로드? 이 동작을 트리거하는'ActiveRecord :: Base'에 뭔가가 있습니까? –
<레일스 3.2를 사용하고 있다면 그것이 작동하는 것입니다. 3.2 레일을 사용하고 있다면 ActiveSupport가 다시로드해야 할 항목을 결정하기 위해 사용하는 경험적 방법을 트립합니다. –