STI kullanırken raylar 3 ile bir has_many ilişkisinden koleksiyon alınırken garip bir davranış alıyorum. Ben:Raylar Alt sınıflarla STI ilişkilendirme
class Branch < ActiveRecord::Base
has_many :employees, class_name: 'User::Employee'
has_many :admins, class_name: 'User::BranchAdmin'
end
class User < ActiveRecord::Base
end
class User::Employee < User
belongs_to :branch
end
class User::BranchAdmin < User::Employee
end
istenilen davranış olduğunu dal yöneticileri dahil branch.employees
döner tüm çalışanlar. Bu konsoldan çıktı şube yöneticileri yalnızca branch.admins
olarak erişildiğini de bu koleksiyon altındaki 'yüklü' gibi görünüyor geçerli:
Branch.first.employees.count
=> 2
Branch.first.admins.count
=> 1
Branch.first.employees.count
=> 3
Bu oluşturulan SQL görülebilir, ilk kez:
SELECT COUNT(*) FROM "users" WHERE "users"."type" IN ('User::Employee') AND "users"."branch_id" = 1
ve ikinci zamanı: sadece belirterek bu sorunu çözebilir
SELECT COUNT(*) FROM "users" WHERE "users"."type" IN ('User::Employee', 'User::BranchAdmin') AND "users"."branch_id" = 1
:
class Branch < ActiveRecord::Base
has_many :employees, class_name: 'User'
has_many :admins, class_name: 'User::BranchAdmin'
end
hepsi branch_id gelen bulunabilir ama sonra sınıf User
varsayılan yapar branch.employees.build
yapmak istiyorum ve bir yere yazın sütununda kesmek zorunda kontrol işlemindeki sorun yaratır çünkü. Bunun için şu an var olan:
has_many :employees, class_name: 'User::Employee',
finder_sql: Proc.new{
%Q(SELECT users.* FROM users WHERE users.type IN ('User::Employee','User::BranchAdmin') AND users.branch_id = #{id})
},
counter_sql: Proc.new{
%Q(SELECT COUNT(*) FROM "users" WHERE "users"."type" IN ('User::Employee', 'User::BranchAdmin') AND "users"."branch_id" = #{id})
}
Ancak mümkünse bunu önlemek isterim. Herkes, herhangi bir fikir?
DÜZENLEME: aile birlikleri bu kullanmayan ve bu nedenle organisation.employees
has_many :employees, through: :branches
yine sadece seçiminde User::Employee
sınıf içerecektir görünüyor çünkü
finder_sql ve counter_sql gerçekten benim için çözülmüş değil.
Bu harika bir fırsat, teşekkürler. Model yapısı her halükarda değişti, bu yüzden problem ortadan kalktı ama ben bunun çevrenin bir etkisi olduğunu düşündüğümü düşünmüyorum! –