Rails 3.1'de bir ActiveRecord sorgusu yapmaya çalışıyorum; burada sonuçları gruplandırılmış öğelerin alt koleksiyonlarına sıralıyorum, bu durumda tarihe göre gruplandırılmış.ActiveRecord grup sonuçlarını tarihe göre alt koleksiyonlara yönlendirir
Sanırım kodum bunu en iyi açıklayabilir. Bu benim yöntemim, hangisi işe yarıyor, ancak işin yapılması için 4 sorgu yayınlıyor. Bu şekilde yapmak çok verimli görünmüyor. group_by kullanmak için aşağıdaki Dave Newton'dan öneri kullanma
def entry_days
days = @user.entry_groups.find(
:all,
:select => 'date',
:limit => 3,
:group => 'date').map(&:date)
entry_days = days.map do |date|
{ :date => date,
:entry_groups => @user.entry_groups.find_all_by_date(date)
}
end
end
, böyle yöntemi yeniden yazdım:
def entry_days
dates_with_entries = @user.entry_groups.find(
:all,
:select => 'date',
:limit => 3,
:group => 'date').map(&:date)
@user.entry_groups.where(:date => dates_with_entries).all.group_by(&:date).
map do |date, entry_groups|
{ :date => date,
:entry_groups => entry_groups }
end
end
En azından ben şimdi sadece 2 sorguları için aşağı var. Yan not
dates_with_entries = user.entry_groups.all(
:select => 'date',
:limit => num_days,
:order => 'date DESC',
:group => 'date').map(&:date)
entry_groups = user.entry_groups.
where(
:date => dates_with_entries
).
all(:order => 'date DESC')
entry_days = entry_days.group_by(&:date).
map { |date, entry_groups|
{
:date => date,
:entry_groups => entry_groups
}
}
:
Sonra böyle tekrar yöntemi yazdı yeniden bir araya pek çok yöntemler zincirleme olmamalı ve iç içe yöntem ve karmaları için tercih girinti biçimi nedir?
Bu soru: http://stackoverflow.com/questions/6953512/rails-3-1-with-postgresql-group-by-must-be-used-in-an-aggregate-function/6953704#6953704, Benzer bir şey tartışıyor – rubish