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

我应该如何company_name获得params

4

2 回答 2

0

使用查找方法

fields_params.find{|x| x.first == "Company Name"}.last # => "Field6"
于 2013-04-17T14:20:30.607 回答
0

[["Company Name", "Field6"], ["Email", "Field5"]]是一种常见的数据模式,一旦你认识到它,你就会知道它很容易被强制转换为哈希:

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

这是它现在的样子:

{
    "公司名称" => "字段6",
           “电子邮件” => “字段 5”
}

那时,很容易获得价值:

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

因此,我将修改您的代码以返回哈希值,从而更容易检索值:

定义字段参数
  # 解析的 JSON 示例,公司名称有时是 Field6,有时是 Field3
  哈希[[[“公司名称”,“字段6”],[“电子邮件”,“字段5”]]]
结尾

很多时候,我看到的 JSON 在解析后已经会产生某种哈希。如果没有看到你的输入 JSON,我不能肯定地说,但它可能已经是那种格式,你正在做的事情是将它变成一个数组数组,这就是哈希在运行时的样子mapor collector has已经to_a申请了。

于 2013-04-17T15:25:47.503 回答