gpt4 book ai didi

ruby-on-rails - Rails 上的 Ruby + Active_Record : How do I include child counts in result?

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

我想出了如何通过在文件夹模型中创建 as_json 方法将子项包含在 to_json 结果中。

def as_json(options={ })
super(
options.merge(
:include => {
:children => { }
}
)
)
end

上面的代码给了我一个 child 的列表,但我想要的是包括计数而不是 child 的列表。我还想将其过滤为仅“活跃”的 child 。

我似乎想不出一个有效的方法来做到这一点。

我正在使用以下代码返回文件夹列表。

def index
@folders = Folder.all(:order => "Name")

respond_with(@folders) do |format|
format.jsonp { render :json => @folders, :callback => params[:callback] }
end
end

最后,我想确保所有结果中的计数都返回,而不仅仅是 json。 json 是最重要的,但我确实想确保它也包含在其他文件中。

我想我可以在查询后使用 .size 将计数添加到 @folders 返回的每个文件夹中。然而,这似乎不起作用......

接下来我开始研究向 Folder 模型添加一个方法,例如...

def child_count
write_attribute(:child_count, children.size)
end

但在看了之后我意识到这并不是真的行得通...

所以现在我正在研究 :select 来做一些 sql 魔术......但如果有更干净的方法,我真的不想走那条路。

感谢提示!

最佳答案

只需添加一个返回 child 数量的child_count 方法,然后使用:methods as_json 的选项:

def as_json(options = { })
super(options.merge(:methods => :child_count))
end

不过,如果 options 中已经有 :methods,您可能需要更加小心地处理 merge覆盖它;像这样的东西可能比直接合并更好:

def add_child_count(options)
options[:methods] = [ options[:methods], :child_count ].flatten.compact.uniq
options
end

def as_json(options = { })
super(add_child_count(options))
end

对于 XML,您可以使用 to_xml 做几乎相同的事情而不是 as_json

关于ruby-on-rails - Rails 上的 Ruby + Active_Record : How do I include child counts in result?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7265760/

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