如何将项目 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.
中有一些好的解决方案
目前我在 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
,有一个很好的讨论