0

我正在创建一个不是来自的select_tag数据。在我的控制器中,我准备了一个适合于:active_recordoptions_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)) %>

这工作正常,我得到了预期的选定项目的 id params[:restaurant_id]。但我还需要下拉菜单中显示的字符串——在我的例子中是名称。如果这来自active_record,我可以使用 id 在数据库中查找它,但它没有。而且我不再拥有之前在另一个控制器方法中创建的数据。如何将所选名称传回params[]

4

1 回答 1

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.

于 2013-08-02T03:24:34.883 回答