html - rails select_tag,如何从数组中生成带有 json 值和自定义文本的下拉列表

标签 html ruby-on-rails ruby json select

我有一个 json 数组,我想创建一个下拉选择列表。因为它是 json,所以我不想显示 json,而是基于可读的名称。

我尝试了两种最接近的方法,但无法得到我想要的。

Controller :

@books = [{"code"=>"PA1","name"=>"James","type"=>"Novel"},{"code"=>"PA2","name"=>"John","type"=>"Science"}] 

方法一

表单.html.erb:

<%= select "book", "book", @books.each_with_index.map {|name, index| [name,name["name"]]} %>

生成的 html:

<select id="book_book" name="book[book]"><option code="PA1" name="James" type="Novel" value="James">James</option>
<option code="PA2" name="John" type="Science" value="John">John</option></select></div>

方法二

表单.html.erb:

<%= select_tag "book", options_for_select(@books) %> 

生成的 html:

<select id="book" name="book"><option value="{&quot;code&quot;=&gt;&quot;PA1&quot;,&quot;name&quot;=&gt;&quot;James&quot;, &quot;type&quot;=&gt;&quot;Novel&quot;}">{&quot;code&quot;=&gt;&quot;PA1&quot;, &quot;name&quot;=&gt;&quot;James&quot;, &quot;type&quot;=&gt;&quot;Novel&quot;}</option><option value="{&quot;code&quot;=&gt;&quot;PA2&quot;, &quot;name&quot;=&gt;&quot;John&quot;, &quot;type&quot;=&gt;&quot;Science&quot;}">{&quot;code&quot;=&gt;&quot;PA2&quot;, &quot;name&quot;=&gt;&quot;John&quot;, &quot;type&quot;=&gt;&quot;Science&quot;}</option></select> </div>   

方法三(更新新方法效果不佳)

即使这样也行不通,有 2 个不同的“值”!越来越沮丧。

@books = [{"value" => {"code"=>"PA1","name"=>"James","type"=>"Novel"}},{"value" => {"code"=>"PA2","name"=>"John","type"=>"Science"}}] 

<%= select "book", "book", @books.each_with_index.map {|value, index| [value,value["value"]["name"]]} %></div>

<select id="book_book" name="book[book]"><option value="James" value="{&quot;code&quot;=&gt;&quot;PA1&quot;, &quot;name&quot;=&gt;&quot;James&quot;, &quot;type&quot;=&gt;&quot;Novel&quot;}">James</option>
<option value="John" value="{&quot;code&quot;=&gt;&quot;PA2&quot;, &quot;name&quot;=&gt;&quot;John&quot;, &quot;type&quot;=&gt;&quot;Science&quot;}">John</option></select></div>

这是我想要的结果,请帮助!

 <select id="book_book" name="book[book]"><option value="{"code"=>"PA1","name"=>"James","type"=>"Novel"}">James</option>
<option value="{"code"=>"PA2","name"=>"John","type"=>"Science"}">John</option></select></div>

最佳答案

我不知道你为什么要将整个散列作为字符串传递给你的 <option> 值 但是如果你想生成这个

<select id="book_book" name="book[book]"><option value="{"code"=>"PA1","name"=>"James","type"=>"Novel"}">James</option>
<option value="{"code"=>"PA2","name"=>"John","type"=>"Science"}">John</option></select></div>

那么你应该写如下

<%= select("book", "book", @books.each.map {|hash| [hash['name'], hash.to_s] }) %></div>

关于html - rails select_tag,如何从数组中生成带有 json 值和自定义文本的下拉列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22290855/

相关文章:

jquery - 没有内容的div高度

html - 用 CSS 中的透明度替换指定的颜色

javascript - 根据最后输入的值,应在下拉列表中启用复选框

ruby-on-rails - rails : Bootsnap fails to load

ruby-on-rails - ruby/rails bool 方法命名约定

ruby - 运行 Docker 时无法运行 ruby​​ 命令

ruby - 映射一个只修改符合特定条件的元素的数组

javascript - 按日期生成报价

ruby-on-rails - 正则表达式攻击向量?

ruby - 在 CentOS 上安装 ruby