gpt4 book ai didi

ruby-on-rails - 如何正确地将两个 as_json 方法组合为一个?

转载 作者:数据小太阳 更新时间:2023-10-29 08:44:40 25 4
gpt4 key购买 nike

在我的模型中,我有一个 as_json 方法,如下所示:

  def as_json(options = {})
super(options.merge(include: [:user, comments: {include: :user}]))
end

此方法用于在评论中包含用户。

现在我需要在同一个模型中添加几乎相同的东西来获得答案:

  def as_json(options = {})
super(options.merge(include: [:user, answers: {include: :user}]))
end

如何组合这两种 as_json 方法,以便我拥有一种 as_json 方法?

别笑,但我为此苦苦挣扎了 3 天。

最佳答案

这是您不应该使用内置 to_json 的原因之一。序列化 ActiveRecord 模型。

相反,您应该将任务委托(delegate)给另一个称为序列化程序的对象。使用序列化程序允许您拥有同一对象的无限表示(序列化)(如果对象可以有不同的变体,例如有/没有评论等,则很有用)和关注点分离 .

创建自己的序列化器很简单,就像拥有一样简单

class ModelWithCommentsSerializer
def initialize(object)
@object = object
end

def as_json
@object.as_json(include: [:user, comments: {include: :user}]))
end
end

class ModelWithAnswersSerializer
def initialize(object)
@object = object
end

def as_json
@object.as_json(include: [:user, answers: {include: :user}]))
end
end

当然,这只是一个例子。您可以提取特征以避免重复。

还有像 ActiveModelSerializers 这样的 gem 。提供了该功能,但我宁愿避免使用它们,因为它们往往会提供更多大多数用户真正需要的东西。

关于ruby-on-rails - 如何正确地将两个 as_json 方法组合为一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33299859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com