2013-04-17 53 views
0

我正在解析JSON并将其传递为fields_array以呈现erb模板。这是一个Sinatra应用程序。如何根据特定标签获得参数值?

我:

private 

def fields_params 
    # example of parsed JSON, Company Name sometimes is Field6 but sometimes Field3 
    [["Company Name", "Field6"], ["Email", "Field5"]] 
end 

def company_name 
    # I want to return company name from params[company_field_id] 
    # Maybe something like: 
    id = fields_params.select{|field| field[0] == "Company Name" }.flatten[1] 
    params[id] 
end 

def fields_array 
    fields_params.collect do |label, param_id| 
    { label: label, value: params[param_id] } if params[param_id] 
    end 
end 

我应该如何得到paramscompany_name

回答

0

[["Company Name", "Field6"], ["Email", "Field5"]]是一种常见的数据模式,而且一旦你认识到它,你就会知道它很容易被裹挟到一个哈希:

hash = Hash[[["Company Name", "Field6"], ["Email", "Field5"]]] 

这里是它看起来像现在:

 
{ 
    "Company Name" => "Field6", 
      "Email" => "Field5" 
} 

在那一点上,很容易得到VA攻略:

hash['Company Name'] 
=> "Field6" 

所以,我想修改代码以返回一个哈希值,使其成为一个更容易检索值:

 
def fields_params 
    # example of parsed JSON, Company Name sometimes is Field6 but sometimes Field3 
    Hash[ [["Company Name", "Field6"], ["Email", "Field5"]] ] 
end 

很多的时候我JSON看到分析后已经会导致某种哈希。没有看到你输入的JSON,我不能肯定地说,但它可能已经是这种格式了,你正在做的事情是把它变成一个数组数组,这是一个哈希看起来像是如果运行通过mapcollect或者已经应用to_a

0

使用find method

fields_params.find{|x| x.first == "Company Name"}.last # => "Field6"