gpt4 book ai didi

ruby-on-rails - RABL - 将集合呈现为对象,以 id 作为键

转载 作者:行者123 更新时间:2023-12-04 19:47:39 25 4
gpt4 key购买 nike

在 Ruby on Rails 4 中,我试图为我的网站创建一个 API,而不是使用像这样的数组:

[{id: 1, name: "John"}, {id: 2, name: "Foo"}, {id: 3, name: "Bar"}]

我想像这样渲染它,因为它使在 javascript 中搜索变得更加容易(以及其他原因):
{"1": {id: 1, name: "John"}, "2": {id: 2, name: "Foo"}, "3": {id: 3, name: "Bar"}}

这有效:
# users/index.rabl

@users.each do |user|
node(users.id.to_s) do
partial('api/v1/users/show', object: user)
end
end

但是在部分中,我想要另一个元素集合(属于用户),但我无法使其正常工作。有没有更优雅的方法来做到这一点?

最佳答案

如果可以控制 API 后端代码库,选择哈希映射而不是数组绝对是更好的选择。从 BigO 符号哈希查找发生在常数 O(1) 时间,而不是像数组那样 O(n)。

从数据库中查找主键是查询数据的最高效方式。主键通常很短并且总是被索引。在大数据集的情况下使用分页。

假设没有 RABL(您始终可以在 RABL DSL 代码中实例化纯 Ruby 类),而只有一个数组:

array = [{id: 1, name: "John"}, {id: 2, name: "Foo"}, {id: 3, name: "Bar"}]
hash = {}
array.each{ |elem,i| hash[elem[:id].to_s] = elem }

# {"1"=>{:id=>1, :name=>"John"}, "2"=>{:id=>2, :name=>"Foo"}, "3"=>{:id=>3, :name=>"Bar"}}

要将 Ruby 哈希传递给客户端上的 Javascript,您可能需要对其进行适当的编码:
# hash.to_json
# {"1":{"id":1,"name":"John"},"2":{"id":2,"name":"Foo"},"3":{"id":3,"name":"Bar"}}

从 Javascript 中,您可以通过其键查询哈希:
hash = {"1":{"id":1,"name":"John"},"2":{"id":2,"name":"Foo"},"3":{"id":3,"name":"Bar"}}
hash[1]
# Object { id=1, name="John"}

关于ruby-on-rails - RABL - 将集合呈现为对象,以 id 作为键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31895676/

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