如何调用 active_model_serializer 以显式序列化记录
How to call an active_model_serializer to serialize records explicitly
我有一个 TimeEntry
模型的序列化程序,如下所示:
class TimeEntrySerializer < ActiveModel::Serializer
attributes :id, :description, :duration
has_one :project
end
当我 return 所有记录时,它按预期工作:
def index
@time_entries = current_user.time_entries.all
respond_to do |format|
format.html
format.json { render json: @time_entries }
end
end
但是,我想return按天组织条目,像这样:
[
{ "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
调用?
要调用并能够重用序列化程序:
options = {}
serialization = SerializableResource.new(resource, options)
serialization.to_json
serialization.as_json
所以我是这样使用的:
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 => day,
:entries => entries.map do |entry|
entry = ActiveModel::SerializableResource.new(entry)
entry.as_json
end
}
end
end
我有一个 TimeEntry
模型的序列化程序,如下所示:
class TimeEntrySerializer < ActiveModel::Serializer
attributes :id, :description, :duration
has_one :project
end
当我 return 所有记录时,它按预期工作:
def index
@time_entries = current_user.time_entries.all
respond_to do |format|
format.html
format.json { render json: @time_entries }
end
end
但是,我想return按天组织条目,像这样:
[
{ "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
调用?
要调用并能够重用序列化程序:
options = {}
serialization = SerializableResource.new(resource, options)
serialization.to_json
serialization.as_json
所以我是这样使用的:
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 => day,
:entries => entries.map do |entry|
entry = ActiveModel::SerializableResource.new(entry)
entry.as_json
end
}
end
end