У меня есть сериалайзер для TimeEntry
модели, которая выглядит следующим образом:Как вызвать active_model_serializer сериализации записи явно
class TimeEntrySerializer < ActiveModel::Serializer
attributes :id, :description, :duration
has_one :project
end
и она работает, как ожидается, когда я просто вернуть все записи:
def index
@time_entries = current_user.time_entries.all
respond_to do |format|
format.html
format.json { render json: @time_entries }
end
end
Однако, я хочу, чтобы вернуть данные, организованные в день, что-то вроде этого:
[
{ "2016-03-16" => [TimeEntry1, TimeEntry2, TimeEntry3] },
{ "2016-03-17" => [TimeEntry1, TimeEntry2] }
]
Я делаю это, как эту форма мою модели:
def self.get_entries_for_user(current_user)
current_user.time_entries
.group_by { |item| item.created_at.to_date.to_s }
.map { |day, entries| { day => entries } }
end
Но теперь, сериализатор не работает для объекта TimeEntry, я не совсем уверен, что это на самом деле должно работать в этой ситуации ... Я хочу чтобы избежать необходимости форматировать данные себя:
def self.get_entries_for_user(current_user)
current_user.time_entries
.group_by { |item| item.created_at.to_date.to_s }
.map do |day, entries|
{
day => entries.map do |entry|
{
:id => entry.id,
:description => entry.description,
:duration => entry.duration_ms,
:start_time => entry.time.begin,
:end_time => entry.time.end,
:project_id => entry.project.id
}
end
}
end
end
можно ли использовать active_model_serializer для этой ситуации? Если это невозможно, то как я могу форматировать данные более эффективно, избегая вложенных вызовов map
?