Я пытаюсь сделать запрос ActiveSerecord в Rails 3.1, где я сортирую результаты в подкологии сгруппированных элементов, в этом случае сгруппирован на дату.
Я думаю, что мой код может объяснить это лучше всего. Это мой метод, который работает, но выпускает 4 запроса, чтобы выполнить работу. Это не кажется очень эффективным, чтобы сделать это таким образом.
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
Используя предложение от Dave Newton ниже, чтобы использовать GROUCK_BY, я переписал этот метод:
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
, по крайней мере, у меня сейчас только 2 запроса.
Тогда я снова написал метод снова, подобный этому:
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
}
}
на боковом примечании: если я не должен быть цепочке так много методов вместе, и что является предпочтительным форматом вдавливания для вложенных методов и хэшей?