我有一个 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="{"code"=>"PA1","name"=>"James", "type"=>"Novel"}">{"code"=>"PA1", "name"=>"James", "type"=>"Novel"}</option><option value="{"code"=>"PA2", "name"=>"John", "type"=>"Science"}">{"code"=>"PA2", "name"=>"John", "type"=>"Science"}</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="{"code"=>"PA1", "name"=>"James", "type"=>"Novel"}">James</option>
<option value="John" value="{"code"=>"PA2", "name"=>"John", "type"=>"Science"}">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/