Bir dizi nesnem var, buna bir Indicator. def self.subjectsBu dizide Gösterge sınıfı yöntemlerini ( çeşit, kapsam, vb.) Çalıştırmak istiyorum . Bir grup nesne üzerinde sınıf yöntemlerini çalıştırmayı bilmemin tek yolu, bunların bir ActiveRecord :: Relation olmasını sağlamaktır. Bu yüzden bir to_indicatorsyöntem eklemeye başvurmaya başladım Array.
def to_indicators
# TODO: Make this less terrible.
Indicator.where id: self.pluck(:id)
end
Bazen sınıf yöntemleri içinde sonuçları filtrelemek için bu kapsamlardan epeyce birkaçını zincirledim. Bu nedenle, bir ActiveRecord :: Relation'da bir yöntem çağırsam da, o nesneye nasıl erişeceğimi bilmiyorum. İçeriğine ancak aracılığıyla allulaşabilirim. Ama allbir Dizidir. Bu yüzden o diziyi ActiveRecord :: Relation'a dönüştürmem gerekiyor. Örneğin bu, yöntemlerden birinin parçasıdır:
all.to_indicators.applicable_for_bank(id).each do |indicator|
total += indicator.residual_risk_for(id)
indicator_count += 1 if indicator.completed_by?(id)
end
Sanırım bu iki soruya indirgeniyor.
- Bir nesne dizisini ActiveRecord :: Relation'a nasıl dönüştürebilirim? Tercihen
whereher seferinde yapmadan . def self.subjectsActiveRecord :: Relation üzerinde bir tür yöntemi çalıştırırken , bu ActiveRecord :: Relation nesnesinin kendisine nasıl erişebilirim?
Teşekkürler. Bir şeyi açıklığa kavuşturmam gerekirse bana bildirin.
.all,.scopedAndrew Marshall'ın cevabının belirttiği gibi kullanın (Raylar 4'te bununla birlikte çalışacaktır.all). Bir diziyi bir ilişkiye dönüştürmeye ihtiyaç duyuyorsanız, bir yerde yanlış