2016-08-18 59 views
2

如何在Ruby中使用jBuilder構建JSON時使用變量名?帶變量名的Ruby JBuilder?

例如,假設我有一個變量var1

var1 = "query_string" 
query = Jbuilder.encode do |json| 
      json.query do 
      json.query_string do 
       json.query "SOMETHING" 
      end 
      end 
     end 

我怎麼可以這樣做:

json.var1 do 

而不是明確:json.query_string

回答

1

爲了發送消息,其名字是不是靜態已知的,可以使用Object#public_send方法:

var1 = 'query_string' 

query = Jbuilder.encode do |json| 
    json.query do 
    json.public_send(var1) do 
     json.query "SOMETHING" 
    end 
    end 
end 
4

您也可以使用set!方法。

jbuider的GitHub上的文檔給出了這樣的例子:

json.set! :author do 
    json.set! :name, 'David' 
end 

# => {"author": { "name": "David" }} 

對於你的榜樣,它會是這樣的:

var1 = "query_string" 
query = Jbuilder.encode do |json| 
    json.query do 
    json.set! var1 do 
     json.query "SOMETHING" 
    end 
    end 
end