2013-07-14 17 views
5

, bir dizi uygulamanın adını, çevreyi içeren bir kayıtla ActiveRecord tarafından yüklenen @apps, adında var vs.Belirli bir özellik değerine sahip bir dizideki öğeleri nasıl sayarım? Benim uygulamada

Şu anda dizideki uygulamaların sayısını elde etmek için @apps.count kullanarak, ama am environment = 0 dizisindeki uygulamaların sayısını saymakla ilgili sorun yaşıyorum.

@apps.count(0)'u denedim, ancak bu, her kayıt için birden fazla alan olduğu için çalışmadı.

Ayrıca @apps.count{ |environment| environment = 0} gibi bir şey denedim ama hiçbir şey olmadı.

Herhangi bir öneriniz var mı?

cevap

12

Sadece istediğiniz ne daraltmak için select kullanın: Bu ActiveRecord dayanıyorsa

@apps.select {|a| a.environment == 0}.count 

Ancak, daha iyi olurdu tabii ki tüm gerekmedikçe sadece yapım başlangıçtaki sorgu bunu sınırlamak kayıtların ve farklı amaçlarla onları farklı şekillerde filtreliyorlar. Sen değişken yanlış var

App.where(environment: 0).count 
+0

İlk çözümle gidiyorum çünkü tüm kayıtlara ihtiyacım var. – ny95

+3

Kayıt sayısına bağlı olarak, DBM'den kayıtları saymasını ve daha sonra bir kaydı her seferinde yinelemesini, daha sonra tüm kayıtları sormaktan ve Ruby'de sayıp yinelemesini istemekten daha hızlı olabilir. DBM, bir 'sayımı 'teslim etmek ve ardından satır satırını yinelemek için optimize edilmiştir. Bir kerede tüm bir tabloyu boşaltmak, DB'nizi, DB ana makinenizi, ağı, kodunuzun çalıştığı ana bilgisayarı ve Rails sunucunuzu ve uygulamanızı yenecektir. –

4

:

Ben modelinizi varsayıyoruz Eğer @apps koymadan çünkü çağrı App olduğunu. Ayrıca, karşılaştırma yerine ödeviniz var.

@apps.count{|app| app.environment == 0} 

veya

@apps.count{|app| app.environment.zero?} 
+0

Bu, her zaman "@ apps.count" değerini "true" veya "false" olup olmadığı gibi görünüyor. Örneğin, '@ apps.count {| app | false} == @ apps.count {| uygulama | Gerçek} ' – Trip

0

ben kullanırım reduce VEYA burada each_with_object:

reduce docs:

@apps.reduce(Hash.new(0)) do |counts, app| 
    counts[app.environment] += 1 
    counts 
end 

each_with_object docs:

Eğer sorgulayabilir ise

,

App.group(:environment).count sayısı olarak çevre gibi anahtarlar ve değerlere sahip bir karma dönecektir sql kullanın.

İlgili konular