1

我有一个名为设备的对象,它与客户相关联。一旦客户订购了设备,工厂就会将设备分配给客户,客户注册设备,设备与其他相关功能之间的通信就可以开始了。

当我通过以下方式向工厂管理员显示编辑页面时:

  <%= form_for @device do |f| %>
    <%= render 'fields', f: f %>

'customer' 字段本身在其自己的表中定义,正确显示为选择下拉列表。但是,该选择的默认值不是当前分配的客户,而只是列表中的当前客户。有没有办法使用上述默认渲染方案使选择下拉菜单使用设备的当前值?

我在这个主题上尝试了几种变体:

  <%= form_for @device do |f| %>
    <%= render 'fields', f: f %>
    <%= f.select :customer, options_for_select(@customers.each{|p| [p.name, p.id]}, @device.customer.name)%>

但是这些方法只会导致一个巨大的下拉菜单运行整个屏幕宽度,即使这样,也不会显示适当的默认值。此外,f.select 只显示客户的对象 ID,而不是名称本身。

4

1 回答 1

1

从 Rails api 文档:

给定一个元素响应 first 和 last 的容器(例如二元素数组),“lasts”用作选项值,“firsts”用作选项文本...如果指定了选择,则匹配的“last” or element 将获得选定的选项标签。

根据这个:

<%= f.select :customer, options_for_select(@customers.map{|p| [p.name, p.id]}, @device.customer.id)%>

您必须将所选选项设置为 id(数组 [name, id] 的“最后一个”):@device.customer.id并使用map.

希望这可以帮助!

于 2013-05-15T21:54:49.947 回答