【问题标题】:Rails Select from JSON ArrayRails 从 JSON 数组中选择
【发布时间】:2012-09-26 05:54:39
【问题描述】:

我有一个从 Foursquare 返回的 JSON 数组;我们称之为@venues。我希望能够通过下拉框“选择”一个场所,并且希望它成为表单的一部分。

这意味着我希望能够按名称选择特定场所(即在本例中为 Hotel Utah Saloon),并将其 id 保存到模型中。澄清一下,我只会保存我选择的场所,而不是全部。

通过研究,我发现自己在selectcollection_selectselect_tag 之间感到困惑。请记住,这是直接来自 JSON.parse 方法的 JSON,而不是数据库模型。

如何在表单中创建此下拉菜单?

为了澄清,@venues 看起来像这样:

[
            {
               "beenHere":8,
               "venue":{
                  "id":"3fd66200f964a52023f11ee3",
                  "name":"Hotel Utah Saloon",
                  "contact":{
                     "phone":"4155466300",
                     "formattedPhone":"(415) 546-6300",
                     "twitter":"hotelutah"
                  },
                  "location":{
                     "address":"500 4th St",
                     "crossStreet":"Corner of Bryant",
                     "lat":37.77947007181946,
                     "lng":-122.39816943501836,
                     "postalCode":"94107",
                     "city":"San Francisco",
                     "state":"CA",
                     "country":"United States",
                     "cc":"US"
                  },
                  "categories":[
                     {
                        "id":"4bf58dd8d48988d1e9931735",
                        "name":"Rock Club",
                        "pluralName":"Rock Clubs",
                        "shortName":"Rock Club",
                        "icon":"https:\/\/foursquare.com\/img\/categories\/arts_entertainment\/musicvenue_rockclub.png",
                        "parents":[
                           "Arts & Entertainment",
                           "Music Venues"
                        ],
                        "primary":true
                     }
                  ],
                  "verified":true,
                  "stats":{
                     "checkinsCount":6654,
                     "usersCount":3330,
                     "tipCount":50
                  },
                  "likes":{
                     "count":0,
                     "groups":[

                     ]
                  },
                  "beenHere":{
                     "count":0
                  }
               }
            }
        ]

【问题讨论】:

    标签: ruby-on-rails ruby json foursquare


    【解决方案1】:

    控制器

    @venues = JSON.parse @venues
    

    查看

    <%= select(:model, :venue_id, @venues.map {|v| [ v['venue']['name'], v['venue']['id'] ] }) %>
    

    或者更清洁:

    控制器

    @venues = JSON.parse @venues
    @venues_list = @venues.map { |v| v['venue'] }
    

    查看

    <%= select(:model, :venue_id, @venues_list.map {|v| [ v['name'], v['id'] ] }) %>
    

    更多关于select helper的信息。

    【讨论】:

    • 在这种情况下:model 是什么?
    • 您要保存场地 ID 的模型(例如,:venue
    猜你喜欢
    • 1970-01-01
    • 2020-08-17
    • 1970-01-01
    • 2014-03-02
    • 2019-05-15
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多