Ruby on rails Rails,select_标记:需要在params中返回id和string

Ruby on rails Rails,select_标记:需要在params中返回id和string,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在创建一个select_标签,它来自的数据不是活动记录。在我的控制器中,我为选择准备了一个适用于选项的数组: @opts = @yap_response["businesses"].map { |bus| [bus["name"], bus["id"]] } 在我看来,我做了一个选择标签: <%= select_tag(:restaurant_id, options_for_select(@opts, @party.restaurant.yap_id)) %> 这很好,我

我正在创建一个
select_标签
,它来自的数据不是
活动记录
。在我的控制器中,我为选择准备了一个适用于
选项的数组:

@opts = @yap_response["businesses"].map { |bus| [bus["name"], bus["id"]] }
在我看来,我做了一个
选择标签

<%= select_tag(:restaurant_id, options_for_select(@opts, @party.restaurant.yap_id)) %>


这很好,我在
params[:restaurant\u id]
中获得了所选项目的id。但是我还需要下拉列表中显示的字符串——在我的例子中是名称。如果这是来自
活动记录
,我可以用id在数据库中查找它,但它没有。我不再拥有我先前在另一个控制器方法中创建的数据。如何在
params[]
中传递所选名称?

我认为没有一种干净的方法可以做到这一点。但这里有一些解决办法:

选项1:对值中的id和名称进行编码,然后在服务器上使用
参数[:restaurant\u id]将其拆分(“:”)

options\u中用于选择的第二个参数也必须是“id:name”

选项2:添加一个隐藏字段,然后使用javascript将其值设置为所选名称。但是如果你的用户没有启用javascript,你显然是运气不好


选项3:添加一个隐藏字段,该字段填充
@yap\u response[“business”]。\u json
。然后解析
it服务器端,并将名称与
params
中的id匹配,选项1就可以了。我尝试了类似的方法,将两个值都放在一个散列中,但不能通过HTML传递。谢谢
@opts = @yap_response["businesses"].map { |bus| [bus["name"], "#{bus['id']}:#{bus['name']}"] }