Bir dizi nesnem var, buna bir Indicator
. def self.subjects
Bu 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_indicators
yö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 all
ulaşabilirim. Ama all
bir 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
where
her seferinde yapmadan . def self.subjects
ActiveRecord :: 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
,.scoped
Andrew 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ış