如何为此json结构设计ruby等效对象

时间:2015-07-14 16:44:01

标签: ruby-on-rails ruby json jbuilder

我有一个json结构,我需要根据客户端提供的url参数进行构建。目前我一直在使用Jbuilder.encode构建json结构,但它变得非常毛茸茸。

self.query = Jbuilder.encode do |json|
            json.query do
                json.filtered do
                    json.filter do
                        json.bool do
                            if(search_term && username)
                                json.array!(should) do
                                  ........

如何构建ruby对象,以便根据它们的初始化方式将它们转换为json?

下面是我想要在ruby模型/ poros(普通的旧红宝石对象)中捕获的完整json结构。

{
    "query": {
        "filtered": {
            "filter": {
                "bool": {
                    "should": [
                        {
                            "query": {
                                "query_string": {
                                    "query": "tablet",
                                    "fields": [
                                        "standard_analyzed_name",
                                        "standard_analyzed_message"
                                    ]
                                }
                            }
                        },
                        {
                            "term": {
                                "username": "feedmatic"
                            }
                        }
                    ],
                    "must": [
                        {
                            "terms": {
                                "status_type": [
                                    "3",
                                    "4"
                                ]
                            }
                        },
                        {
                            "range": {
                                "created_on": {
                                    "gte": 20140712,
                                    "lte": 1405134711
                                }
                            }
                        }
                    ]
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

嗯,我不太确定Poro的,但我看到的一件事是,当结构开始变得毛茸茸时,就是制作一个返回你想要显示的哈希表示的方法。您是否尝试过创建一个返回带有该结构的哈希的查询方法,然后在jbuilder模板中调用它? 有一个.attributes方法用于rails返回带有属性的哈希,但你必须研究如何将它与PORO一起使用,以及它是否适用于此目的。