繁体   English   中英

如何在ruby中创建复杂的哈希?

[英]How to create a complex hash in ruby?

我正在构建一个使用ElasticSearch的Rails应用程序。 我正在尝试做的是让rails应用程序向客户端发送带有ElasticSearch结果的JSON对象。 我可以使用帮助的地方是如何正确创建发送到Web客户端的对象。

现在,在我的rails控制器中,我正在创建一个哈希。 哈希是正确的方法吗? 我是否正确创建哈希?

# Get the search results
@documents = current_user.documents.search(params[:q], current_user.id)

# Create the HASH
if @documents.count > 0
  @documents.aggregations.by_authentication_id.buckets.each_with_index do |bucket, index|
    # Create buckets
    @json[ :buckets ][ index ] = {}
    @json[ :buckets ][ index ][ :key ] = bucket["key"]
    @json[ :buckets ][ index ][ :documents ] = {}
    bucket["by_top_hit"].hits.hits.each_with_index do |d,i|
        @json[ :buckets ][ index ][ :documents ][i] = {
          title: d._source.document_title,
          snippet: d.text
        }
    end
end

logger.debug @json

我是否正确创建对象? 我正在寻找学习如何正确/最佳地做到这一点。 我感谢您的建议,技巧等...谢谢

不太确定您要寻找的是什么,但我认为作为JSON对象,此结构可能对您更好:

json = {}
json[:buckets] = @documents.aggregations.by_authentication_id.buckets.map do |bucket|

  {
    key: bucket["key"],
    documents:  bucket["by_top_hit"].hits.hits.map do |doc| 
                  { title: doc._source.document_title,
                    snippet: doc.text
                  }
                end  
  }
end

这将产生看起来像

 {buckets: [
          {key: 'bucket_key',
           documents: [
                    {title: 'Some Title',
                     snippet: 'snippet'},
                    {title: 'Some Title2',
                     snippet: 'snippet2'}
           ]},
           {key: 'bucket_key2',
           documents: [
                    {title: 'Some Title3',
                     snippet: 'snippet3'},
                    {title: 'Some Title4',
                     snippet: 'snippet4'}
           ]}
         ]
  }

然后,您只需在此Hash上调用.to_json即可获取此对象的json字符串,以将其传递回去。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM