Json在rails中响应selectBox

时间:2015-10-03 18:33:38

标签: jquery ruby-on-rails arrays json hash

我有以下Json回复:

[ {
    "Year": 2016,
    "Links": [ {
        "Href": "/v1/Information/YMME/Years/2016/Makes",
        "Rel": "VehicleMakes"
      } ]
  },
  {
    "Year": 2015,
    "Links": [ {
        "Href": "/v1/Information/YMME/Years/2015/Makes",
        "Rel": "VehicleMakes"
      } ]
  },
  {
    "Year": 2014,
    "Links": [ {
        "Href": "/v1/Information/YMME/Years/2014/Makes",
        "Rel": "VehicleMakes"
      } ]
  },
  {
    "Year": 2013,
    "Links": [ {
        "Href": "/v1/Information/YMME/Years/2013/Makes",
        "Rel": "VehicleMakes"
      } ]
  },
  {
    "Year": 2012,
    "Links": [ {
        "Href": "/v1/Information/YMME/Years/2012/Makes",
        "Rel": "VehicleMakes"
      } ]
  } ]

如您所见,是一个嵌套哈希数组。我知道有几个帖子,但无论是我的技能水平还是我希望能够操纵这些数据的问题的单一性。什么方法可以帮助我将这些数据带入Selectbox,以便只显示年份。到目前为止,在我看来这就是我所拥有的,只是将完整的对象放在选择框中。我只想看一年。

    <%=select_tag("Year", options_for_select(@caryears))%>

其中@caryears是完整的哈希数组或(对象)。顺便说一下,我不能根据响应来使用符号,这是我获取数据的方式。这个想法是在人选择年份之后转到年份链接

1 个答案:

答案 0 :(得分:1)

我认为您正在寻找的是ruby方法collect。 Collect为您执行内部迭代并返回对象数组。您可以传递一个块来收集,允许您准确定义要返回的内容。在你的情况下,它看起来像这样:

json_object.collect{|o| [o["Year"],o["Links"][0]["Href"]]}

请注意链接后的[0]。在您的示例json响应中,只有一个定义了链接的数组。如果将来发生变化,或者确实有多个变化,则此0将始终返回列表中的第一个链接。此外,如果没有链接,它将失败。

您可以在此处阅读有关收集的更多信息:http://ruby-doc.org/core-2.2.0/Array.html

第二部分是options_for_select。这是一个简单而简单的嵌套数组,每个都有2个参数,第一个是向用户显示的内容,第二个是值,在这种情况下是这个url。对于复杂的显示,你也应该阅读那篇文章。

http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/options_for_select