我有一个如下所示的Task模型:
class Task
# has a title
belongs_to :owner, class_name: "User"
belongs_to :asignee, class_name: "User
end
带有json字段metadata
的Sprint:
create_table :sprints, id: :uuid do |t|
t.json :metadata
end
class Sprint
def close_sprint
self.metadata = serialized_tasks
self.save
end
end
我正在使用活动模型序列化程序来序列化sprint tasks
,如下所示:
def serialized_tasks
ActiveModel::Serializer::CollectionSerializer.new(self.tasks, serializer: TaskSerializer).to_json
end
问题在于它将任务数据存储为json string
而不是json对象。
序列化器看起来像这样:
class TaskSerializer < ActiveModel::Serializer
attributes :title, :owner_name, :created_at, :status, :asignee_name, :asignee_email
def owner_name
object&.owner&.full_name
end
def asignee_name
object&.asignee&.full_name
end
def asignee_email
object&.asignee&.email
end
end
如何使用active_model_serializers将有效的JSON对象存储在rails json字段中?如果不可能,我如何查询关联数据作为存储在metadata
字段中的有效JSON对象?
答案 0 :(得分:0)
我能够使用as_json
代替to_json
来获取我需要的哈希。
as_json(options = nil)
返回表示模型的哈希。一些 配置可以通过选项传递。
选项include_root_in_json控制的顶级行为 as_json。如果为true,as_json将发出以。之后命名的单个根节点 对象的类型。 include_root_in_json选项的默认值为 假的。