Sto cercando di eseguire una query ActiveRecord in Rails 3.1 in cui ho ordinato i risultati in sottoinsiemi di elementi raggruppati, in questo caso raggruppati per data.Rails ActiveRecord raggruppa i risultati in raccolte secondarie per data
Penso che il mio codice possa spiegarlo meglio. Questo è il mio metodo, che funziona ma emette 4 query per portare a termine il lavoro. Non sembra molto efficiente farlo in questo modo.
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
Utilizzando il suggerimento di Dave Newton di seguito per utilizzare group_by, ho riscritto il metodo come questo:
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
almeno ho giù a solo 2 domande ora.
Poi ho ri-scritto il metodo di nuovo in questo modo:
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
}
}
Su un lato nota: non dovrei essere concatenamento tanti metodi insieme, e ciò che è il formato di rientro preferito per i metodi e gli hash annidati?
Questa domanda: http://stackoverflow.com/questions/6953512/rails-3-1-with-postgresql-group-by-must-be-used-in-an-aggregate-function/6953704#6953704, discute qualcosa di simile – rubish