我正在从select_tag
的不的数据中创建active_record
。在我的控制器中,我准备了一个适合options_for_select
的数组:
@opts = @yap_response["businesses"].map { |bus| [bus["name"], bus["id"]] }
在我看来,我制作了select_tag
:
<%= select_tag(:restaurant_id, options_for_select(@opts, @party.restaurant.yap_id)) %>
这很好用,我得到了params[:restaurant_id]
中所选项目的ID。但是我还需要在下拉列表中显示的字符串 - 在我的例子中是名称。如果这来自active_record
,我可以在数据库中查找id,但事实并非如此。而且我不再拥有我之前在其他控制器方法中创建的数据。如何在params[]
?
答案 0 :(得分:0)
我认为没有一种干净的方法可以做到这一点。但这里有一些解决方法:
选项1:对值中的ID和名称进行编码,然后使用params[:restaurant_id].split(':')
在服务器上拆分它们。
@opts = @yap_response["businesses"].map { |bus| [bus["name"], "#{bus['id']}:#{bus['name']}"] }
options_for_select
中的第二个参数也必须是“id:name”。
选项2:添加隐藏字段,然后使用javascript将其值设置为所选名称。但如果您的用户没有启用JavaScript,那么您显然不走运。
选项3 :添加一个填充了@yap_response["business"].to_json
的隐藏字段。然后JSON.parse
在服务器端,并将名称与params
中的ID匹配。