首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用散列数组填充select_tag?

如何使用散列数组填充select_tag?
EN

Stack Overflow用户
提问于 2012-12-31 08:20:34
回答 6查看 25.6K关注 0票数 23

在一个Rails3.2应用程序中,我尝试添加一个select字段,它从外部API调用中获取数据。此数据以散列数组的形式返回:

代码语言:javascript
复制
[{"name"=>"NameA", "id"=>"001"}, {"name"=>"NameB", "id"=>"002"}]

如何使用这些数据构造如下所示的select字段:

代码语言:javascript
复制
<select>
  <option value="001"> NameA </option>
  <option value="002"> NameB </option>
</select>

编辑:

多亏了下面的建议,我尝试了以下方法:

答:

代码语言:javascript
复制
<%= select_tag 'model[field]', options_from_collection_for_select(@hash, :id, :name) %>

给出一个错误:

代码语言:javascript
复制
undefined method `name' for {"name"=>"NameA", "id"=>"001"}:Hash

B:

代码语言:javascript
复制
<%= select_tag 'model[field]', options_from_collection_for_select(@hash) %>

修复了错误,但生成了错误的标记

代码语言:javascript
复制
<option value="{"name"=>"NameA", "id"=>"001"}"> {"name"=>"NameA", "id"=>"001"}</option>

所以我认为我的问题是正确地格式化散列数组,而我对如何操作散列数组了解不够。

除非我完全从工作的方向看,否则我认为解决这个问题的关键是重新格式化这个问题顶部的数组,以给出:

代码语言:javascript
复制
{"NameA" =>"001", "NameB" =>"002"}

这有可能吗?如果是这样,又是如何做到的呢?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-07-31 14:54:12

一个更好的方法是只用一个命令:

代码语言:javascript
复制
<%= select_tag "model[field]", options_for_select(@array_of_hashes.map { |obj| [obj['name'], obj['id']] }) %>

使用您的示例散列:

代码语言:javascript
复制
irb> @array_of_hashes = [{"name"=>"NameA", "id"=>"001"}, {"name"=>"NameB", "id"=>"002"}]
=> [{"name"=>"NameA", "id"=>"001"}, {"name"=>"NameB", "id"=>"002"}]
irb> @array_of_hashes.map { |obj| [obj['name'], obj['id']] }
=> [["NameA", "001"], ["NameB", "002"]]
票数 17
EN

Stack Overflow用户

发布于 2013-11-11 18:43:14

如果你有像这样的散列数组:

代码语言:javascript
复制
@people = [{"name"=>"NameA", "id"=>"001"}, {"name"=>"NameB", "id"=>"002"}]

您可以将options_for_select助手与collect方法一起使用,如下所示:

代码语言:javascript
复制
= select_tag "people", options_for_select(@people.collect {|p| [ p['name'], p['id'] ] })

完成了:-)。

票数 40
EN

Stack Overflow用户

发布于 2016-11-09 00:11:37

对我来说,在selects中使用散列的最简单方法是:

散列:

代码语言:javascript
复制
REVISION_TYPES={"S"=>"Stock", "T"=>"Traducción"}

在表单中:

代码语言:javascript
复制
select_tag(:revision_type,options_for_select(REVISION_TYPES.invert.to_a))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14096126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档