أعيد فتح العدد رقم 868 لأنه لا يزال موجودًا حتى اليوم.
لقد استخدمت Ruby-1.9.3-p362 و Rails 3.2.9
الحل الوحيد هو طلب فصول فرعية أو استخدام config.cache_classes = true
> Support.all
=> []
> Employee
=> Employee(id: integer, type: string)
> Administrator
=> Administrator(id: integer, type: string)
> Support.all
=> [#<Administrator id: 1, type: "Administrator">, #<Employee id: 2, type: "Employee">]
لقد قمت بإعادة إنتاجه على القضبان 4
القضبان 4.0.0.beta
روبي 1.9.3p194.5
1.9.3p194 :001 > Administrator.create
1.9.3p194 :003 > Employee.create
1.9.3p194 :008 > Support.all
Support Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."type" IN ('Support', 'Administrator', 'Employee')
=> #<ActiveRecord::Relation [#<Administrator id: 1, type: "Administrator">, #<Employee id: 2, type: "Employee">]>
1.9.3p194 :009 > reload!
Reloading...
=> true
1.9.3p194 :010 > Support.all
Support Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."type" IN ('Support')
=> #<ActiveRecord::Relation []>
هذا هو القيد المعروف لاستخدام STI في وضع التطوير مع التحميل البطيء للفئات. تحتاج إلى استخدام require_dependency
لجعل ريلز على دراية بهذه الفئات الفرعية ، على سبيل المثال:
# app/models/support.rb
class Support < User
end
require_dependency 'administrator'
require_dependency 'employee'
إذا كان لديك الكثير من هذه الفئات الفرعية ، فيمكنك استخدام Dir[]
ومجلد خاص في app
لتحميلهم جميعًا ، على سبيل المثال:
# app/models/user.rb
class User < ActiveRecord::Base
end
Dir["#{Rails.root}/app/users/*.rb"].each do |file|
require_dependency file
end
أو البديل الثالث هو ترميز القائمة في Model.descendants
، على سبيل المثال:
# app/models/user.rb
class User < ActiveRecord::Base
def self.descendants
[Support, Administrator, Employee]
end
end
لم أستخدم الأخير شخصيًا ولكن يجب أن يعمل.
لدي هذا النوع من المشاكل ولا يمكنني تشغيله. نماذجي هي A و B (والمزيد) <C و D (والمزيد) <B.
بعد تغيير الرمز ، أحصل على "ثابت B غير مهيأ". حاولت أن تتطلب الاعتماد بطريقتين ، لكن لا أعرف حقًا 1) أي فئة (فئات) تتطلب (B؟) ، و 2) أين تفعل ذلك.
ترتبط هذه النماذج بنماذج أخرى بعدة طرق ، وقد يكون لذلك تأثير على ترتيب التحميل أيضًا (على سبيل المثال A ينتمي إلى X ، X has_many Bs and Cs)
التعليق الأكثر فائدة
هذا هو القيد المعروف لاستخدام STI في وضع التطوير مع التحميل البطيء للفئات. تحتاج إلى استخدام
require_dependency
لجعل ريلز على دراية بهذه الفئات الفرعية ، على سبيل المثال:إذا كان لديك الكثير من هذه الفئات الفرعية ، فيمكنك استخدام
Dir[]
ومجلد خاص فيapp
لتحميلهم جميعًا ، على سبيل المثال:أو البديل الثالث هو ترميز القائمة في
Model.descendants
، على سبيل المثال:لم أستخدم الأخير شخصيًا ولكن يجب أن يعمل.