如何将项目 ID 传递给数据列表中的文本字段标签

How to pass in item Id to text field tag from datalist

目前我在 Rails 上学习 Ruby。所以我尝试制作 1 个简单的应用程序,但我遇到了一些问题。

我想将项目 ID 从 select 标签数据列表传递到 rails 中的文本字段标签。但我想在我的 select 标签数据列表中显示项目名称和项目代码。所以现在我不确定将项目 ID 传递给文本字段标签。我在下面附上了我的代码。

后端的预期参数

["1", "2"]

现在它向后端发送参数

["厘米", "海里"]

Expected View

所以这是文本字段标签和 select 标签的代码

<div class="col-md-4">
  <%= f.label :item, class: 'required'%>
   <% items = Item.where(company_id: current_user.company.id)%>
   <%= text_field_tag "[supplier_item][item_ids][]", nil, {list: 'browser-item'} %>
     <datalist id="browser-item" >
        <%= select_tag "[supplier_item][item_select][]", options_for_select(items.collect{ |item| [item.name, item.item_code]}), {class: "form-control"} %>
      </datalist>
 </div>

我不确定您在问题中添加的预期视图是否是您当前的视图,因为代码不会呈现我认为的那样。

因为你想同时显示项目名称和 item_code 并将项目 ID 传递给后端,你可以使用字符串连接:

<%= select_tag "[supplier_item][item_select][]", options_for_select(items.collect{ |item| ["#{item.name} - #{item.item_code}", item.id]}), {class: "form-control"} %>

option 标签有一个属性 value,它是发送到后端的值,当使用 options_for_select 创建 select_tag 时,您传递一个数组值数组像这样:

[['A', 1], ['B', 2], ['C', 3]]

这将呈现为:

<option value="1">A</option>
<option value="2">B</option>
<option value="3">C</option>

即第一个值作为标签,第二个值作为将发送到后端的选项标签的实际值。这就是您现在在后端获得 item_code 而不是 id.

的原因

更新: 因为你正在使用 datalist 标签并不重要它总是显示 value,有一个很好的讨论 为你的情况,如果你希望有不同的显示值。另一种方法是使用 select 标签,如果这对你有用,或者上面 link.

中有一些好的解决方案